_ConnectionPtr m_pConnection在MFC常规DLL中m_pConnection.Release()失败!(在线等待,可出到1000分)

Ozzman 2004-04-02 01:37:50
BOOL CXXXApp::InitInstance()
{
::CoInitialize(NULL);

m_pConnection.CreateInstance(__uuidof(Connection));

return CWinApp::InitInstance();
}

int CXXXApp::ExitInstance()
{
m_pConnection.Release();

::CoUninitialize();

return CWinApp::ExitInstance();
}
EXE调用DLL没有问题,但当程序退出时,出现内存报错。
单步跟踪这个常规DLL,发现是m_pConnection.Release();时报的错!

在线等待,不够可以再给
...全文
174 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ygang76 2004-04-18
  • 打赏
  • 举报
回复
void Release() throw(_com_error)
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}

m_pInterface->Release();
m_pInterface = NULL;
}
上面是_com_ptr_t类的Release函数,实际上,其在调用Release之后会把m_pInterface置为空,而在_com_ptr_t的析构函数中调用的是_Release()函数。_Release函数体如下。
void _Release() throw()
{
if (m_pInterface != NULL) {
m_pInterface->Release();
}
}
所以不存在调用Release()函数之后会再次析构的问题。
我估计原因应该还是可能没有调用close()函数。
SXSXY 2004-04-18
  • 打赏
  • 举报
回复
同意楼上。
你如果自已先把它Release了,它在析构的时候再Release就会出错
nightfallrove 2004-04-18
  • 打赏
  • 举报
回复
我觉得可以不Release
因为这是一个智能指针,
它在析构的时候会自己Release
如果你再给它来一个Release的话估计会有问题。。。
itmaster 2004-04-18
  • 打赏
  • 举报
回复
参考下:
http://www.yesky.com/20020320/1602630.shtml
itmaster 2004-04-18
  • 打赏
  • 举报
回复

试试
int CXXXApp::ExitInstance()
{
m_pConnection->Close();

m_pConnection.Release();

::CoUninitialize();

return CWinApp::ExitInstance();
}
Ozzman 2004-04-18
  • 打赏
  • 举报
回复
没有人回答吗

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧