msxml程序最后一行出错
Error in last line of msxml program
我使用MSXML 4.0来解析我的xml。
程序运行正常,但就在程序终止之前,我得到了以下异常
未处理的异常在0x00417be5 indb22 .exe: 0xC0000005:访问冲突读取位置0x00b1c740.
at comip.h
at _Release()
法在m_pInterface->Release();
线
这是我的代码
#include <iostream>
#include "stdafx.h"
#include "Database.h"
#include <sstream>
#include <objbase.h>
#import <msxml4.dll>
using namespace std;
void main(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pXMLDom;
HRESULT hr= pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument40), NULL, CLSCTX_INPROC_SERVER); //Msxml2.DOMDocument.4.0
if (FAILED(hr))
{
printf("Failed to instantiate an XML DOM.n");
//return 0;
}
try
{
pXMLDom->async = VARIANT_FALSE;
pXMLDom->validateOnParse = VARIANT_FALSE;
pXMLDom->resolveExternals = VARIANT_FALSE;
if(pXMLDom->load("users.xml") == VARIANT_TRUE)
{
printf("XML DOM loaded from users.xml:n%sn", (LPCSTR)pXMLDom->xml);
}
else
{
// Failed to load xml
printf("Failed to load DOM from stocks.xml. %sn",
(LPCSTR)pXMLDom->parseError->Getreason());
}
::CoUninitialize();
}
catch(_com_error errorObject)
{
printf("Exception thrown, HRESULT: 0x%08x", errorObject.Error());
}
catch(...)
{
printf("Unknown error");
}
}
我不知道我的程序出了什么问题。它只是在最后一行之前抛出一个异常。
谁能给我指个正确的方向?编辑:奇怪我从我的程序中删除了::CoUninitialize();
,它工作得很好。
::CoUninitialize();
方法有什么问题?
谢谢,
在调用CoUninitialize
之后,您隐式地使用COM。这是在MSXML2::IXMLDOMDocumentPtr
的析构函数中完成的,它调用函数IXMLDOMDocument::Release
。
CoUninitialize
必须是最后一个被调用的COM函数。
做这些更改,它将工作。我已经确保CoUninitialize
将在MSXML2::IXMLDOMDocumentPtr
的析构函数之后被调用:
void XMLDomTest()
{
MSXML2::IXMLDOMDocumentPtr pXMLDom;
HRESULT hr= pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument40), NULL, CLSCTX_INPROC_SERVER); //Msxml2.DOMDocument.4.0
if (FAILED(hr))
{
printf("Failed to instantiate an XML DOM.n");
return;
}
try
{
pXMLDom->async = VARIANT_FALSE;
pXMLDom->validateOnParse = VARIANT_FALSE;
pXMLDom->resolveExternals = VARIANT_FALSE;
if(pXMLDom->load("users.xml") == VARIANT_TRUE)
{
printf("XML DOM loaded from users.xml:n%sn", (LPCSTR)pXMLDom->xml);
}
else
{
// Failed to load xml
printf("Failed to load DOM from stocks.xml. %sn",
(LPCSTR)pXMLDom->parseError->Getreason());
}
}
catch(_com_error errorObject)
{
printf("Exception thrown, HRESULT: 0x%08x", errorObject.Error());
}
catch(...)
{
printf("Unknown error");
}
}
void main(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
XMLDomTest();
::CoUninitialize();
}
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 从C++dll访问C#中的一行主要参数
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 在C++中,我如何接受不同于同一行的用户输入
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 如何从一行中读取特定数量的字符?(C++)
- 为x86而非x64编译时出错
- msxml程序最后一行出错