C++ _当我尝试使用ccombject函数创建实例时,pAtlModule指针为null
我正在开发OPC(OLE过程控制)客户端程序,使用异步回调方法使用KepServer从PLC获取数据。但我遇到了以下问题: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
CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object
// Create Instance of Callback Object using an ATL template
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
这是在atlcom.h
关于如何解决这个问题有什么想法吗?当您使用likeccombject
时,假设您有一个ATL项目,其中定义了“ATL模块”类,例如baseforexe应用程序
在没有定义模块类/实例的情况下,全局内部\u pAtlModule
变量没有初始化,因此出现了问题。您需要添加模块类
添加ATL支持的方法之一是使用IDE,通常是在现有项目基于MFC的情况下:
CAppModule
实例,如果您的项目正在使用WTL:
然后第三种方法是使用Visual Studio向导创建一个新的匹配类型(EXE或DLL)的干净ATL项目,并检查
CAtlDllModuleT
或CAtlExeModuleT
类周围的代码,然后在现有项目中复制该项目。@lyang您应该将其标记为解决方案。它给回答的人打分。似乎你也可以使用CComObjectNoLock,但这不会锁定模块。然后使用CComCreator创建对象(但这会增加引用计数,与CComObject::CreateInstance相反)。
_pAtlModule->Lock();