如何使用CAtlComModule实现COM事件接收器?

时间:2012-09-10 13:39:16

标签: c++ com atl

我尝试重构现有的工作 COM事件接收器实现。事件接收器类是用C ++编写的,驻留在使用不推荐使用的CComModule类的DLL中。重构的目标是用新的ATL 7.0类CAtlComModule替换CComModule

现有实现在.cpp文件中的某处声明了一个全局变量:

CComModule _Module;

正如您所看到的,该变量具有通常的“魔术”名称_Module。但是,缺少惯常的初始化,没有调用CComModule::Init(),DLL项目中也没有COM对象映射。事件接收器仍然有效,它的事件处理程序方法被正确调用。

缺少任何文档如何从CComModule过渡到CAtlComModule,我天真地尝试将变量声明更改为:

CAtlComModule _Module;
但是,它没有成功:更改后事件接收器停止工作,即不再调用其事件处理程序方法。

是否有人知道迁移到CAtlComModule时应执行的步骤?到目前为止,我无法在MSDN上或谷歌上找到解决方案,但也许我看起来不太合适......

BTW:如果有必要,我可以提供有关事件接收器实现的更多细节,但到目前为止,我觉得问题不在这个领域。

1 个答案:

答案 0 :(得分:5)

CComModule最简单的“新风格”替代品如下所示:

class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;