首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

调用COM,退出程序时奇怪异常!

2012-02-10 
调用COM,退出程序时奇怪错误!!!!下面代码是调用别人的COM,但是我退出时,却出了这个问题,CCmdTarget::~CCmd

调用COM,退出程序时奇怪错误!!!!
下面代码是调用别人的COM,但是我退出时,却出了这个问题,
CCmdTarget::~CCmdTarget()
{
#ifndef   _AFX_NO_OLE_SUPPORT
if   (m_xDispatch.m_vtbl   !=   0)
((COleDispatchImpl*)&m_xDispatch)-> Disconnect();
ASSERT(m_dwRef   <=   1);//断言!!!!
#endif
#ifdef   _AFXDLL
m_pModuleState   =   NULL;
#endif
}
请问达人,是我调用的问题,还是COM编写的问题,调用代码如下:
In_ecardPtr   pECard;
hr   =   ::CoCreateInstance(
CLSID_COClass_n_ecard,
NULL,
CLSCTX_INPROC_SERVER,
IID_In_ecard,//   不再经过   IUnknown,   直接得到   IFun   接口指针
(LPVOID   *)   &pECard);

if(   FAILED(   hr   )   )
        return   ;

if(   pECard   )
        pECard.Release();




[解决办法]
pECard-> Release();
[解决办法]
你可以在实例化对象之后,调用该对象的一个其他方法,再release()
直接创建,然后就退出,好像有这样的问题

[解决办法]
单步跟踪检查一下引用计数
有可能你addref之后忘记release了
[解决办法]
if (SUCCEEDED(hr))
{
// 卸载COM服务.
CoFreeUnusedLibraries();
}
你加上这个实验一下
[解决办法]
你用的是智能指针包装类?
hr = ::CoCreateInstance(
CLSID_COClass_n_ecard,
NULL,
CLSCTX_INPROC_SERVER,
IID_In_ecard,// 不再经过 IUnknown, 直接得到 IFun 接口指针
(LPVOID *) &pECard);

改成
HRESULT hr = pECard.CreateInstance( __uuidof(In_ecard) );

热点排行