因为工作需要接触了OPC通信协议的项目,在开发客户端的时候,写的断开连接的功能块出现了问题。具体来说,是通过CComObject类进行建立异步回调,进而建立与OPC服务器的连接,而在断开服务器的时候,会出现以下报错:
中断程序后,在DEBUG的模式下,程序停在了atlcom.h文件下的virtual ~CComObject() throw()类中的_pAtlModule->Unlock(),在RELEASE模式下,停在了同一个函数中STDMETHOD_(ULONG,Release)上,参看其注释,可以知道因为断开连接的时候,没有正确的释放掉CComObject这类。
图1 DEBUG模式下,程序停止的位置

在OPC通信协议项目开发中,遇到客户端断开连接时出现异常。问题集中在CComObject类的异步回调处理,导致在DEBUG和RELEASE模式下程序在释放对象时停止。解决方案是正确使用AddRef()和FinalConstruct()来管理对象的引用计数,确保在断开连接时正确释放资源。
最低0.47元/天 解锁文章
1353

被折叠的 条评论
为什么被折叠?



