繁体   English   中英

C#COM Interop:如何从C ++转换指令?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM