VC调用COM小心内存泄露

 

最近开发一个项目用到一个COM组件,COM组件一个函数的声明如下:

 

VARIANT_BOOL _TradeClass::ExecuteOperation ( long iOperationType, _bstr_t strPara, BSTR * strResult, BSTR * strErrCode, BSTR * strErrDesc ) 

 

对该接口的返回值我是这么使用的

 

CComBSTR sResult; CComBSTR sErrCode; CComBSTR sErrDesc; char* pResult; m_module->ExecuteOperation(optType, m_strPara.GetBuffer(0), &sResult, &sErrCode, &sErrDesc); pResult = _com_util::ConvertBSTRToString(sResult); 

结果在调试状态下发现有内存泄露,经排查才发现是没有释放pResult指向的内存所致。原因是_com_util::ConvertBSTRToString在堆中申请了一块内存并返回该内存指针,因此必须在程序退出前将该内存释放。因此修改代码如下,就没有内存泄露了。

CComBSTR sResult; CComBSTR sErrCode; CComBSTR sErrDesc; char* pResult; m_module->ExecuteOperation(optType, m_strPara.GetBuffer(0), &sResult, &sErrCode, &sErrDesc); pResult = NULL; pResult = _com_util::ConvertBSTRToString(sResult); if (pResult != NULL) { delete pResult; } 

你可能感兴趣的:(VC调用COM小心内存泄露)