_pAtlModule指针是空的,当我尝试使用CComObject函数创建实例

_pAtlModule pointer is null when i try to CreateInstance using the CComObject function

本文关键字:CComObject 函数 实例 创建 指针 pAtlModule      更新时间:2023-10-16

我正在研究OPC(OLE进程控制)客户端程序,使用异步CALLBACK方法从PLC获取数据。但是我遇到了这个问题:

CComObject<COPCDataCallback>* pCOPCDataCallback;    // Pointer to Callback Object
// Create Instance of Callback Object using an ATL template
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);

然后停在这里:

_pAtlModule->Lock();

在atlcom.h

有什么办法解决这个问题吗?

当您使用ATL类如CComObject时,假设您有一个ATL项目,其中定义了"ATL模块"类,如基于EXE应用程序的CAtlExeModuleT

没有定义模块类/实例,没有初始化全局内部_pAtlModule变量,因此出现了问题。您需要添加模块类。

添加ATL支持的方法之一是使用IDE,特别是如果您现有的项目是基于mfc的:
  • 为现有的mfc应用程序添加ATL支持
  • 如何在现有的Windows应用程序中获得ATL支持

另一种方法是添加CAppModule实例,如果您的项目使用WTL:

  • CAppModule vs CAtlExeModuleT,获取应用程序消息循环

第三种方法是使用Visual Studio向导创建一个新的匹配类型的干净的ATL项目(EXE或DLL),并检查CAtlDllModuleTCAtlExeModuleT类周围的代码,然后在您现有的项目中复制。