C++ _当我尝试使用ccombject函数创建实例时,pAtlModule指针为null

C++ _当我尝试使用ccombject函数创建实例时,pAtlModule指针为null,c++,com,atl,C++,Com,Atl,我正在开发OPC(OLE过程控制)客户端程序,使用异步回调方法使用KepServer从PLC获取数据。但我遇到了以下问题: CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object // Create Instance of Callback Object using an ATL template CComObject<COPCDataCallback>::Cre

我正在开发OPC(OLE过程控制)客户端程序,使用异步回调方法使用KepServer从PLC获取数据。但我遇到了以下问题:

CComObject<COPCDataCallback>* pCOPCDataCallback;    // Pointer to Callback Object

// Create Instance of Callback Object using an ATL template
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
这是在atlcom.h

关于如何解决这个问题有什么想法吗?

当您使用like
ccombject
时,假设您有一个ATL项目,其中定义了“ATL模块”类,例如baseforexe应用程序

在没有定义模块类/实例的情况下,全局内部
\u pAtlModule
变量没有初始化,因此出现了问题。您需要添加模块类

添加ATL支持的方法之一是使用IDE,通常是在现有项目基于MFC的情况下:

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


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

@lyang您应该将其标记为解决方案。它给回答的人打分。似乎你也可以使用CComObjectNoLock,但这不会锁定模块。然后使用CComCreator创建对象(但这会增加引用计数,与CComObject::CreateInstance相反)。
_pAtlModule->Lock();