我尝试重构现有的和有效 COM 事件接收器实现。事件接收器类是用 C++ 编写的,驻留在使用已弃用的 CComModule
的 DLL 中。类(class)。重构的目标是用新的 ATL 7.0 类替换 CComModule
CAtlComModule .
现有的实现在 .cpp 文件的某处声明了一个全局变量:
CComModule _Module;
如您所见,该变量具有通常的“神奇”名称 _Module
。但是,缺少惯用的初始化,没有对 CComModule::Init()
的调用,而且 DLL 项目中也没有 COM 对象映射。事件接收器仍然有效,它的事件处理程序方法得到正确调用。
由于没有任何文档说明如何从 CComModule
转换为 CAtlComModule
,我天真地尝试将变量声明更改为:
CAtlComModule _Module;
但它没有成功:更改后事件接收器停止工作,即它的事件处理程序方法不再被调用。
有谁知道迁移到 CAtlComModule
应该执行的步骤?到目前为止,我一直无法在 MSDN 上或通过 Google 找到解决方案,但也许我看起来不正确......
顺便说一句:如有必要,我可以提供有关事件接收器实现的更多详细信息,但到目前为止我觉得问题不在这方面。
最佳答案
CComModule
的最简单的“新样式”替换如下所示:
class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;
关于c++ - 如何使用 CAtlComModule 实现 COM 事件接收器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352938/