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

创建实现特定接口的ATL COM对象

  •  2
  • Rob  · 技术社区  · 15 年前

    我需要实现一个简单的ATL COM对象,该对象实现一个特定的接口,我已经得到了一个.tlb文件和一个.idl文件。该接口非常简单,只包含一个方法。我在过去创建了许多ATL对象,但从未创建过一个必须实现特定接口的对象。我需要什么来实现这一点?我假设我需要在我的新对象IDL的某处引用接口的IDL或TLB?

    欢迎任何指点。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Daniel Earwicker    15 年前

    这里的答案比其他答案更自动。所有样板代码都是VisualStudio为您编写的。

    你很幸运你有。idl,我想这是目前为止最方便的。

    您可以将.idl文件的内容粘贴到ATL COM项目现有的.idl文件中,这样您就可以访问其中的声明。例如,类似的内容可以粘贴到IDL文件中:

    [
        object,
        uuid(ecaac0b8-08e6-45e8-a075-c6349bc2d0ac),
        dual,
        nonextensible,
        helpstring("IJim Interface"),
        pointer_default(unique)
    ]
    interface IJim : IDispatch
    {
        [id(1), helpstring("method SpliceMainbrace")] HRESULT SpliceMainbrace(BSTR* avast);
    };
    

    然后在类视图中,右键单击类并选择 Add | Implement Interface .

    IJim > 按钮将其添加到要实施的列表中。按 完成 .

    // IJim Methods
    public:
        STDMETHOD(SpliceMainbrace)(BSTR * avast)
        {
            // Add your function implementation here.
            return E_NOTIMPL;
        }
    
        2
  •  1
  •   sharptooth    15 年前

    编译.IDL文件时,可以要求MIDL生成带有C++接口定义的头文件——包括头文件,并从特定接口的C++等效继承继承类。您还可能需要将C++接口作为参数传递给ATL辅助类基类。 IDispatchImpl .

        3
  •  1
  •   John Knoeller    15 年前

    如果您有interface.tlb文件,则可以使用

    #import "interface.tlb"
    

    要将它包含在.CPP文件中,编译器将将.TLB转换为C++风格的接口声明。它创建一个名为 在飞行中,然后 #includes 这是自动的。

        4
  •  1
  •   Peter Nimmo    15 年前