添加"正常"类成员到COM类

时间:2014-06-04 08:35:08

标签: c++ com

我对与COM有关的一些做法有疑问。拥有一个COM课程并且其中有一个普通/常规课程的成员是好的/正常的做法吗?

这是我的意思的简短例子:

// in myClass.h
class MyClass
{
    // constructors, members etc.
};


// in myCOMClass.h
#include "myClass.h"
class IMyCOMClass : public IUnknown
{
    // AddRef & co. etc.
    protected:
        MyClass _m;
};

上述代码是否可以接受,或者是不良做法且未经修改?

1 个答案:

答案 0 :(得分:4)

由于面向未来和构建时间的原因,是完全正常的:

理想情况下,您希望尽可能少地在COM类中添加功能。这是为了便于将代码移植到其他接口类(例如JNI for Java,XLL for Excel等)。我已经看到一些COM接口使用 pImpl idiom 来完全抽象出COM类的功能。

它也可以帮助构建时间:IDL的更改将强制重新编译包含自动生成的COM头的所有编译单元。对于大型COM库来说,这可能会非常繁琐。

在您的情况下,这意味着将MyClass* _m作为数据成员并在标题中使用前向声明。