我试图把我的相机制造商提供的COM互操作指令翻译成C++。
他们写道:
要获得接口,您可以使用普通的COM函数从捕获过滤器请求所需的特定接口。
例如:
IBaseFilter* pSourceFilter;
...
CComQIPtr<IManufacturersInterface> pKs( pSourceFilter );
pKs->SetShutterSpeed( ssAuto1 );
它们还提供接口签名和guid。签名看起来像
interface IManufacturersInterface: IUnknown
{
// more stuff
HRESULT SetShutterSpeed( [in] eShutterSpeed lShutter );
// more stuff
}
我翻译成C作为
[ComImport]
[Guid("926ddb16-3c8e-476c-9068-eb4555a99231")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IManufacturersInterface
{
// more stuff
[PreserveSig]
int SetShutterSpeed([In] eShutterSpeed lShutter);
// more stuff
}
从
another source
我首先得到了一个类似的DirectShow包装器来访问相机,包括一个COM导入的接口。
IBaseFilter
. 我现在如何翻译第一个示例?
我试过
IManufacturersInterface control = sourceFilter as IManufacturersInterface; // sourceFilter is declared as IBaseFilter
control.SetShutterSpeed(eShutterSpeed.ssAuto1);
但在转换后控件为空。
对不起,如果我含糊不清,我不知道我在这里做什么。这是我第一次使用COM互操作。它显示,嗯?=)