我对与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;
};
上述代码是否可以接受,或者是不良做法且未经修改?
答案 0 :(得分:4)
由于面向未来和构建时间的原因,和是完全正常的:
理想情况下,您希望尽可能少地在COM类中添加功能。这是为了便于将代码移植到其他接口类(例如JNI for Java,XLL for Excel等)。我已经看到一些COM接口使用 pImpl idiom 来完全抽象出COM类的功能。
它也可以帮助构建时间:IDL的更改将强制重新编译包含自动生成的COM头的所有编译单元。对于大型COM库来说,这可能会非常繁琐。
在您的情况下,这意味着将MyClass* _m
作为数据成员并在标题中使用前向声明。