解决:OPC客户端建立异步回调出现的异常

因为工作需要接触了OPC通信协议的项目,在开发客户端的时候,写的断开连接的功能块出现了问题。具体来说,是通过CComObject类进行建立异步回调,进而建立与OPC服务器的连接,而在断开服务器的时候,会出现以下报错:

解决:OPC客户端建立异步回调出现的异常_第1张图片

中断程序后,在DEBUG的模式下,程序停在了atlcom.h文件下的virtual ~CComObject() throw()类中的_pAtlModule->Unlock(),在RELEASE模式下,停在了同一个函数中STDMETHOD_(ULONG,Release)上,参看其注释,可以知道因为断开连接的时候,没有正确的释放掉CComObject这类。

解决:OPC客户端建立异步回调出现的异常_第2张图片

图1 DEBUG模式下,程序停止的位置

解决:OPC客户端建立异步回调出现的异常_第3张图片

图2 RELEASE模式下,程序停止的位置


参考了这个贴子C++开发opc客户端,建立异步回调时出现问题,求指导CComObject类实例化成功后的引用计数为零,使用时要增加引用计数AddRef,使用完再减少引用计数 Release。

基于上述的规定,我在建立连接,实例化CComObject并使用完该实例化对象后使用AddRef()函数和FinalConstruct()函数释放了该对象。具体使用参见下面:

解决:OPC客户端建立异步回调出现的异常_第4张图片

以上

你可能感兴趣的:(OPC)