ATL/COM : 在 IDL 文件中我们可以创建一个可以用作返回类型的类

Posted

技术标签:

【中文标题】ATL/COM : 在 IDL 文件中我们可以创建一个可以用作返回类型的类【英文标题】:ATL/COM : In IDL file can we create a class which can be used as return type 【发布时间】:2014-01-08 21:54:02 【问题描述】:

我正在研究 COM/ATL。我需要使用一个类对象作为返回值,以便它可以在托管代码中使用。我可以在 idl 文件中定义结构,也可以在创建方法时将其用作返回参数。 下面是部分idl文件实现:

    import "oaidl.idl";
    import "ocidl.idl";

//Structure for message mapping of activation and deactivation 
//Structures are working properly
[uuid(E2240D8B-EB97-4ACD-AC96-21F2EAFFE100)]
struct tagActivationManaged


    WORD            wMsgId;
    WORD            wStatus;
    WORD            wClient;
    WORD            wClientId;

;


//same manner if creating class it throws error.
[uuid(2ED2E59C-9362-46b2-80D8-471AD69BA5D5)]
class AuthenticationMessage

    public: 
    Word message;

我需要更改 MIDL 中的任何设置吗?

注意:我是 COM 编程新手。

【问题讨论】:

【参考方案1】:

你不能这样做——IDL 中没有 C++ 风格的类。如果你想从函数返回某个类的对象,你必须声明一个interface,可能还有一个coclass(根据你的情况可能不需要后者)并使函数返回该接口。

【讨论】:

以上是关于ATL/COM : 在 IDL 文件中我们可以创建一个可以用作返回类型的类的主要内容,如果未能解决你的问题,请参考以下文章

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

ATL/COM 对象的链接方法

设置我的 ATL COM 回调函数

ATL/COM:MIDL 编译器不输出分配接口的 UUID

创建 ATL COM 对象后如何填写 ProgID。 ProgID 重要性

将接口 IDL 文件转换为 C#