3

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

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

CComModule _Module;

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

由于缺乏如何从 to 转换的任何文档CComModuleCAtlComModule我天真地试图将变量声明更改为:

CAtlComModule _Module;

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

有谁知道迁移到应该执行的步骤CAtlComModule?到目前为止,我无法在 MSDN 或通过 Google 上找到解决方案,但也许我看起来不太正确......

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

4

1 回答 1

5

最简单的“新样式”替换CComModule如下所示:

class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;
于 2012-09-14T00:41:40.213 回答