Com 尝试在OPC服务器和客户端(回调对象)之间创建连接的ATLAdvice中的堆栈

Com 尝试在OPC服务器和客户端(回调对象)之间创建连接的ATLAdvice中的堆栈,com,atl,Com,Atl,使用ATL模板创建回调对象的实例 CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback); pCbUnk = pCOPCDataCallback->GetUnknown(); XXXX ntdll.dll处未处理的异常 在此之前,我向MFC项目添加了ATL支持 有什么办法解决这个问题吗? 谢谢。似乎是我的错,AtlAdvise的第四个参数的类型是DWORD,但是我设置的这个参数有问题。现在一切都

使用ATL模板创建回调对象的实例

CComObject<COPCDataCallback>::CreateInstance(&pCOPCDataCallback);
pCbUnk = pCOPCDataCallback->GetUnknown();
XXXX ntdll.dll处未处理的异常 在此之前,我向MFC项目添加了ATL支持

有什么办法解决这个问题吗?
谢谢。

似乎是我的错,AtlAdvise的第四个参数的类型是DWORD,但是我设置的这个参数有问题。现在一切都很顺利。谢谢大家。

对于任何未处理的异常,您都希望调用堆栈来指定异常的位置。问题可能出现在您没有显示的COPCDATA回调实现中。要检查的一个典型事项是,代码执行是否意外到达~COPCDATA回调,因为您可能会错误地执行COM引用。亲爱的Roman R,我已经检查了代码执行构造函数,然后返回到AtlAdvise的下一个代码,它没有到达析构函数。因此CCombject对象仍在堆栈中。我认为这个问题与我是新手的ATL有关。你还有其他建议吗?
HRESULT hRes = AtlAdvise(m_IOPCGroupStateMgt,            // [in] IUnknown Interface of the Connection Point
    pCbUnk,              // [in] IUnknown Interface of the Callback object
    IID_IOPCDataCallback,// [in] Connection Point ID: The OPC Data Callback 
    m_dwAdvise           // [out] Cookie that that uniquely identifies the connection
    );