我有一个成员变量声明为
CComPtr<IXMLDOMDocument2> m_spXMLDoc;
这样创建XML文档
CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument2, (void**)&m_spXMLDoc));
现在,当应用程序退出时,将引发异常。调用栈指向
p->Release()
~CComPtrBase() throw()
{
if (p)
p->Release();
}
当我将鼠标悬停在VS调试器中的
p
时,它指向一些有效的内存。最后一个调用栈指向msxm6中的异常
msxml6.dll!3d6cXX03()
有什么建议,可能是什么原因?我不认为这是
CComPtr
问题。 最佳答案
我遇到了类似的问题,最终我发现这只是一个错误。我必须确保在破坏CoUninitialize()
之后调用CComPtr
。否则,将会有异常(exception)。
int _tmain(int argc, _TCHAR* argv[]) {
CoInitialize(NULL);
mymain();
//put all logic in a separate function so that CComPtr
//is destructed before CoUninitialize()
CoUninitialize();
return 0;
}
在与
CComPt
调用相同的函数中声明CoUninitialize()
r将导致异常,因为销毁发生在函数终止后。关于CComPtr销毁期间的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3288264/