MSXML6 中的第一次机会异常
First chance exception in MSXML6
我正在根据 XSD 架构验证 XML 文件,就像它们在 MSXML 文档示例中所做的那样。我有以下代码:
XMLSchemaValidation updateInfoSchema;
updateInfoSchema.DoInitialization(L"schema.xsd");
HRESULT hr = CoInitialize(NULL);
if(SUCCEEDED(hr))
{
try
{
_bstr_t bstrOutput = updateInfoSchema.validateFile(L"valid.xml");
}
catch(_com_error &e)
{
updateInfoSchema.dump_com_error(e);
}
CoUninitialize();
}
// Macro that calls a COM method returning HRESULT value.
#define CHK_HR(stmt) do { hr=(stmt); if (FAILED(hr)) goto CleanUp; } while(0)
_bstr_t XMLSchemaValidation::validateFile(_bstr_t bstrFile)
{
// Declare and initialize variables
MSXML2::IXMLDOMSchemaCollectionPtr pXS;
MSXML2::IXMLDOMDocument2Ptr pXD;
MSXML2::IXMLDOMParseErrorPtr pErr;
_bstr_t bstrResult = L"";
HRESULT hr = S_OK;
// Create a schema cache and add xsd schema to it.
CHK_HR(pXS.CreateInstance(__uuidof(MSXML2::XMLSchemaCache60), NULL, CLSCTX_INPROC_SERVER));
CHK_HR(pXS->add(L"", (LPCSTR)(SchemaFileName.GetString())));
// Create a DOMDocument and set its properties.
CHK_HR(pXD.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER));
// Assign the schema cache to the DOMDocument's schemas collection.
pXD->schemas = pXS.GetInterfacePtr();
// Load bstrFile into the DOM document.
pXD->async = VARIANT_FALSE;
pXD->validateOnParse = VARIANT_TRUE;
pXD->resolveExternals = VARIANT_TRUE;
if(pXD->load(bstrFile) != VARIANT_TRUE)
{
pErr = pXD->parseError;
bstrResult = _bstr_t(L"Validation failed on ") + bstrFile +
_bstr_t(L"n=====================") +
_bstr_t(L"nReason: ") + _bstr_t(pErr->Getreason()) +
_bstr_t(L"nSource: ") + _bstr_t(pErr->GetsrcText()) +
_bstr_t(L"nLine: ") + _bstr_t(pErr->Getline()) +
_bstr_t(L"n");
}
else
{
bstrResult = _bstr_t(L"Validation succeeded for ") + bstrFile +
_bstr_t(L"n======================n") +
_bstr_t(pXD->xml) + _bstr_t(L"n");
}
CleanUp:
return bstrResult;
}
XMLSchemaValidation::DoInitialization(CString XSDFileName)
将 XSD 架构文件名获取到 CString XMLSchemaValidation::SchemaFileName
中。
然后,代码遵循 MSXML 示例中的代码,但我得到
First-chance exception at 0x76f9c41f (KernelBase.dll) in CSW.exe: Microsoft C++ exception: _com_error at memory location 0x04a7f014..
当代码到达CHK_HR(pXS->add(L"", (LPCSTR)(SchemaFileName.GetString())));
. hr
有 -2146697210。
谁能告诉我为什么会这样?
MSXML 会引发HRESULT
OBJECT_NOT_FOUND
(0x800C0006),因为您使用的 xml 未指定字符集,如本问题中所述。或者 MSXML 找不到该文件。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- BunkerBuilder.exe中0x0070C75C处的首次机会异常:0xC0000005:写入位置0xCCCCC0
- 首次机会异常设置检查列表视图中的状态
- 创建CFrameWnd会给出第一次机会的异常——为什么
- MSXML6 中的第一次机会异常
- 错误地使用fprintf?获取异常 第一次机会异常
- 我的代码中的第一次机会异常
- ConsoleApplication2.exe中的首次机会异常:0xC0000005:写入访问冲突,c++
- VC++中的首次机会异常
- 为什么我得到第一次机会异常,如果没有人调用该函数
- 在0x5919c8ec (msvcr100d.dll)的第一次机会异常:0xC0000005:访问违反读取位置0xfee
- c++ OBJ解析器-第一次机会异常
- 此异常是什么意思>第一次机会异常在 Project3 中0x000007FEFD38A06D时未处理的异常.exe
- ..处的首次机会异常:读取位置时发生访问冲突..当使用Visual Studio 2010进行调试时
- 在Win7 64位上因未处理的首次机会异常而崩溃(在XP 32位、Linux 64位上没有问题)