当我尝试使用CComObject函数创建CreateInstance时_pAtlModule指针为null

时间:2015-10-13 09:34:53

标签: c++ com atl

我正在使用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

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:4)

当您使用ATL classes之类CComObject时,假设您有一个ATL项目,其中定义了“ATL模块”类,例如基于EXE应用程序的CAtlExeModuleT

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

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

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

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