当我尝试使用 CComObject 函数 CreateInstance 时,_pAtlModule 指针为空

2024-03-14

我正在开发 OPC(OLE 过程控制)客户端程序,使用异步 CALLBACK 方法使用 KepServer 从 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 类 https://msdn.microsoft.com/en-us/library/x1c35cc3 like CComObject,假设你有一个ATL项目,里面定义了“ATL module”类,比如CAtlExeModuleT https://msdn.microsoft.com/en-us/library/d13b538z基于 EXE 应用程序。

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

添加 ATL 支持的方法之一是使用 IDE,通常如果您的现有项目基于 MFC:

  • 向现有 mfc 应用程序添加 ATL 支持 https://stackoverflow.com/questions/8046786/adding-atl-support-to-existing-mfc-application
  • 如何在现有 Windows 应用程序中获得 ATL 支持 https://stackoverflow.com/questions/25164042/how-to-get-atl-support-into-an-existing-windows-application

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

  • CAppModule 与 CAtlExeModuleT ,获取应用程序消息循环 https://stackoverflow.com/questions/17884290/cappmodule-vs-catlexemodulet-getting-the-application-message-loop/17884618#17884618

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我尝试使用 CComObject 函数 CreateInstance 时,_pAtlModule 指针为空 的相关文章

随机推荐