ana*_*and 5 com atl exception smart-pointers visual-c++
我有一个成员变量声明为
CComPtr<IXMLDOMDocument2> m_spXMLDoc;
Run Code Online (Sandbox Code Playgroud)
XML文档就是这样创建的
CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument2, (void**)&m_spXMLDoc));
Run Code Online (Sandbox Code Playgroud)
现在,当应用程序退出时,会抛出异常.Callstack指向p->Release()
~CComPtrBase() throw()
{
if (p)
p->Release();
}
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停p在VS调试器中时,它指向一些有效的内存.
最后一个callstack指向msxm6中的异常
msxml6.dll!3d6cXX03()
Run Code Online (Sandbox Code Playgroud)
有什么建议,可能是什么原因?我不认为这是一个CComPtr问题.
我有一个类似的问题,最终我发现它只是一个错误.我必须确保CoUninitialize()在CComPtr被破坏之后被称为.否则,会有例外.
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;
}
Run Code Online (Sandbox Code Playgroud)
CComPt在与CoUninitialize()调用相同的函数中声明r 将导致异常,因为在函数终止后发生破坏.
| 归档时间: |
|
| 查看次数: |
1599 次 |
| 最近记录: |