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

标签 c++ com atl

我尝试重构现有的和有效 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/

相关文章:

html - 是否可以在 Visual Studio C++ 项目中将 Javascript 和 CSS 代码与 HTML 代码分开?

c# - 将 safearray 中的 PIC N(n) 传递给 COM 对象

excel - 使用 VB.NET 获取正在运行的 Excel 实例

c++ - 在 VC++ 2010 中将数组作为参数传递时出现编译器错误

c++ - 与 GCC 配合使用的适用于 Windows 7 的免费 C/C++ IDE

c# - 尝试在 C# 中打开 Word 应用程序时出错

c++ - ATL/COM:为什么 CComSafeArray::GetCount() 会为空数组引发异常?

c++ - 实现COM接口(interface) C++/VC++ 6.0/MFC

c++ - 来自 std::string 的高效 QVariant 构造

c++ - CodeBlocks 未定义对 WinMain@16 的引用