我正在使用OPC(OLE过程控制)客户端程序,使用异步CALLBACK方法使用KepServer从PLC获取数据。但是我遇到了问题:
#include <iostream>
using namespace std;
class foo
{
public:
void func ()
{
cout << "In func" << endl;
}
private:
int a;
};
int main () {
foo *f1 = NULL;
f1->func();
}
然后它停在这里:
CComObject<COPCDataCallback>* pCOPCDataCallback; // Pointer to Callback Object
// Create Instance of Callback Object using an ATL template
CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
这是在atlcom.h
有关如何解决此问题的任何想法?
答案 0 :(得分:4)
当您使用ATL classes之类CComObject
时,假设您有一个ATL项目,其中定义了“ATL模块”类,例如基于EXE应用程序的CAtlExeModuleT
如果没有定义模块类/实例,则不会初始化全局内部_pAtlModule
变量,因此也就是问题。您需要添加模块类。
添加ATL支持的一种方法是使用IDE,通常如果您的现有项目是基于MFC的:
另一种方法是添加CAppModule
实例,如果您的项目使用的是WTL:
然后第三种方法是使用Visual Studio向导创建一个匹配类型(EXE或DLL)的新的干净ATL项目,并检查CAtlDllModuleT
或CAtlExeModuleT
类的代码,然后复制在你现有的项目中。