程序主要内容如下:
HRESULT hr;
MSXML2::IXMLDOMDocumentPtr docPtr;
CoInitialize(NULL); 
hr = docPtr.CreateInstance("Msxml2.DOMDocument.4.0");
if (FAILED(hr))
{
MessageBox(NULL, _T("无法创建DOMDocument对象!"), _T("error"), MB_OK);
return -1;
}
CoUninitialize();
(注明:头文件要加#import "msxml4.dll")
就这么简单的一段程序,运行完出现异常对话框,说:“test.exe遇到问题需要关闭。我们对此引起的不便表示抱歉。……”为什么会出现这个异常啊?如果我把这段代码放在try块里,就不会出现问题了,可是为什么也没执行catch子句里的MessageBox啊?加上try-catch后的代码如下: try{
HRESULT hr;
MSXML2::IXMLDOMDocumentPtr docPtr;
CoInitialize(NULL); 
hr = docPtr.CreateInstance("Msxml2.DOMDocument.4.0");
if (FAILED(hr))
{
MessageBox(NULL, _T("无法创建DOMDocument对象!"), _T("error"), MB_OK);
return -1;
}
}catch(...)
{
MessageBox(NULL, _T("异常!"), _T("error"), MB_OK);
}
CoUninitialize();
帮我解决一下这个问题吧,多谢啦!

解决方案 »

  1.   

    看你的样子,不是rebuild all的问题吧,去掉try catchrebuild all看看
      

  2.   

    你能不能跟踪一下啊
    有没有安装 MSXML4.0啊?
      

  3.   

    HRESULT CoInitialize(
      LPVOID pvReserved  //Reserved; must be NULL
    );
    看看是不是COM初始化失败。VERIFY(S_OK == CoInitialize(NULL));
      

  4.   

    谢谢你们答复我,不过不是各位说的情况,你们最好实际调试一下这个程序,帮我想想是什么原因,调试这个程序,运行最后一句return 0;后,就会出现错误对话框,内容为:"Unhandled exception in test.exe;0xc0000005:Access Violation."此时程序进入到系统头文件COMIP.H里面,所在内容为:
    void _Release() throw()
    {
    if (m_pInterface != NULL) {
    m_pInterface->Release();
    }
    }
    指示的当前行为:m_pInterface->Release();这是什么原因?
      

  5.   

    你必须在CoUninitialize();之前执行docPtr.Release()。
    否则,COM库释放在先,当函数返回时,智能指针docPtr再自动释放就会出现访问异常。====================================
     少而寡欲颜常好 老不求官梦亦圆
     CSDN助手 全面支持CSDN论坛
      

  6.   


    CoInitialize(NULL); 放到最前面