我正在处理 OPC(OLE 过程控制)客户端程序,使用异步回调方法使用 KepServer 从 PLC 获取数据。但我遇到了问题:
CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object
// Create Instance of Callback Object using an ATL template
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
Run Code Online (Sandbox Code Playgroud)
然后它停在这里:
_pAtlModule->Lock();
Run Code Online (Sandbox Code Playgroud)
这是在 atlcom.h
关于如何解决这个问题的任何想法?
当您使用ATL类一样CComObject
,假设你有一个ATL项目,在它定义的“ATL模块”类,如CAtlExeModuleT
基于对EXE应用程序。
没有定义模块类/实例,没有全局内部_pAtlModule
变量的初始化,因此问题。您需要添加模块类。
添加 ATL 支持的方法之一是使用 IDE,通常如果您现有的项目是基于 MFC 的:
另一种方法是添加CAppModule
实例,如果您的项目使用 WTL:
然后第三种方法是使用 Visual Studio 向导创建一个新的匹配类型(EXE 或 DLL)的干净 ATL 项目,并检查周围的代码CAtlDllModuleT
或CAtlExeModuleT
类,然后将其复制到现有项目中。