[英]C# COM Interop: How to translate instructions from C++?
我正在尝试将我的相机制造商为C ++提供的COM Interop指令转换为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
}
从另一个来源,我得到了一个类似的DirectShow包装器,该包装器首先用于访问摄像机,包括COM导入的接口IBaseFilter
。 我现在将如何翻译第一个示例?
我试过了
IManufacturersInterface control = sourceFilter as IManufacturersInterface; // sourceFilter is declared as IBaseFilter
control.SetShutterSpeed(eShutterSpeed.ssAuto1);
但转换后控件为null。
抱歉,如果我不确定,我不知道我在这里做什么。 这是我第一次使用COM Interop。 它表明,嗯? =)
进行com互操作的最简单方法是让Visual Studio为您创建互操作-我将它与许多不同的com对象一起使用,并且从未遇到过任何问题。 首先,在C#项目中选择“添加引用”,然后选择“ COM”选项卡,在列表中找到相机制造商的对象,然后就应该完成了。 现在,您可以像使用原生C#一样使用com对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.