我正在开发 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(使用前将#替换为@)