代码之家  ›  专栏  ›  技术社区  ›  Jens

C~*COM互操作:如何翻译C++指令?

  •  2
  • Jens  · 技术社区  · 14 年前

    我试图把我的相机制造商提供的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互操作。它显示,嗯?=)

    1 回复  |  直到 14 年前
        1
  •  1
  •   Grzenio    14 年前

    进行COM互操作的最简单方法是让Visual Studio为您创建互操作-我将它与许多不同的COM对象一起使用,并且从未遇到过任何问题。要开始,请在您的C项目中选择添加引用并选择选项卡com,在列表中找到相机制造商的对象,然后完成操作。现在您可以像使用本机C_那样使用COM对象。