我尝试重构现有的工作 COM事件接收器实现。事件接收器类是用C ++编写的,驻留在使用不推荐使用的CComModule
类的DLL中。重构的目标是用新的ATL 7.0类CAtlComModule替换CComModule
。
现有实现在.cpp文件中的某处声明了一个全局变量:
CComModule _Module;
正如您所看到的,该变量具有通常的“魔术”名称_Module
。但是,缺少惯常的初始化,没有调用CComModule::Init()
,DLL项目中也没有COM对象映射。事件接收器仍然有效,它的事件处理程序方法被正确调用。
缺少任何文档如何从CComModule
过渡到CAtlComModule
,我天真地尝试将变量声明更改为:
CAtlComModule _Module;
但是,它没有成功:更改后事件接收器停止工作,即不再调用其事件处理程序方法。
是否有人知道迁移到CAtlComModule
时应执行的步骤?到目前为止,我无法在MSDN上或谷歌上找到解决方案,但也许我看起来不太合适......
答案 0 :(得分:5)
CComModule
最简单的“新风格”替代品如下所示:
class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;