CoUninitialize(); 有问题

我喝多了 2010-05-01 01:19:48
try
{
CoInitialize(NULL);
if(FAILED(xmlrequest.CreateInstance("Msxml2.XMLHTTP"))
return 4;
........
........
........
CoUninitialize(); 在XP系统中,程序执行到这个函数的时候,程序窗口自动关闭,程序挂掉了。是怎么回事啊,WIN7系统下就没事.
catch(...)
{
....
}
...全文
242 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
尹成 2010-05-01
  • 打赏
  • 举报
回复
检查一下是不是在CoUninitialize 调用的时候还有未完结的接口引用?

这个问题经常发生在使用 #inmport 生成的 智能接口 包装上.
比如:

void main()
{
CoInitialize(NULL);

IApplicationPtr app;
app.CreateInstance(...);

try{
}
catch(_comn_error&) {}

CoUninitialize();
}


在上面这种情况下,极易出问题, 因为 app 接口不会在CoUninitialize 之前释放. 这种情况是未定义的. 会发生什么谁也不能肯定.

正确地做法是 明确地在 卸载 COM 前释放所有的 COM 接口引用:

...
app.Release();
CoUninitialize();
}


实例:

CMyDatabase::CMyDatabase()
{
::CoInitialize(NULL); //初始化COM库

//AfxOleInit();
m_pRecordset = NULL;
m_pConnection = NULL;
m_pCommand = NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCommand.CreateInstance(__uuidof(Command));
}

CMyDatabase::~CMyDatabase()
{
m_pCommand.Release();
m_pRecordset.Release();
m_pConnection.Release();
::CoUninitialize();
}
向立天 2010-05-01
  • 打赏
  • 举报
回复
调试不报错么?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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