Добавление Xml-схемы не удалось из-за генерации DLL API
Привет,
Я работаю над проектом проверки xml-схемы. Когда я использовать API-интерфейс MSXML6.dll в отдельный проект,он отлично работает.Но когда я использовал тот же API 0f MSXML2.dll API, он возвращает код ошибки E-FAIL без какой-либо причины.
Итак, для этого, когда я отлаживаю приложение, я заметил, что за каждым API выполняются некоторые необработанные функции, и он возвращает код ошибки.
Я скопировал код ниже и прокомментировал неудачный API.Если кто-то столкнулся с этой проблемой,пожалуйста, дайте мне знать.
Спасибо
bool cXML::validatefile(const char* fileName) { MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL; MSXML2::IXMLDOMDocument2Ptr pXSDDoc = NULL; MSXML2::IXMLDOMSchemaCollectionPtr pSCache = NULL; MSXML2::IXMLDOMNodePtr pNode = NULL; MSXML2::IXMLDOMNodeListPtr pNodelist = NULL; MSXML2::IXMLDOMParseErrorPtr pError = NULL; HRESULT hr; long i = 0; long x = 0; CoInitialize(NULL); try{ // Load validateNode.xml into a DOM instance. hr = pXMLDoc.CreateInstance("msxml2.domdocument"); if (FAILED(hr)) { MessageBox(NULL, "Cannot create DOMDocument30 xml", "CreateInstance", MB_OK); return 0; } pXMLDoc->async = VARIANT_FALSE; pXMLDoc->validateOnParse = VARIANT_TRUE; if (pXMLDoc->load("pain00100103.xml") != VARIANT_TRUE) { show_parse_error(_bstr_t("Can't load pain.001.001.03.xml\n"), pXMLDoc->parseError); return 0; } // Load validateNode.xsd into a DOM instance. hr = pXSDDoc.CreateInstance("msxml2.domdocument"); if (FAILED(hr)) { MessageBox(NULL, "Cannot create DOMDocument60 for xsd", "CreateInstance", MB_OK); return 0; } pXSDDoc->async = VARIANT_FALSE; pXSDDoc->validateOnParse = VARIANT_FALSE; if (pXSDDoc->load("pain.001.001.03.xsd") != VARIANT_TRUE) { show_parse_error(_bstr_t("Can't load pain.001.001.03.xsd\n"), pXSDDoc->parseError); return 0; } // Create a schema cache. hr = pSCache.CreateInstance(__uuidof(MSXML2::XMLSchemaCache60)); if (FAILED(hr)) { MessageBox(NULL, "Cannot create XMLSchemaCache60", "CreateInstance", MB_OK); return 0; } // Point the XML doc's schema to the loaded schema cache. pXMLDoc->schemas = pSCache.GetInterfacePtr(); //Below statement 'pSCache->add()' first parameter return error code E-FAIL hr = pSCache->add(L"urn:iso:std:iso:20022:tech:xsd:pain.001.001.03", pXSDDoc.GetInterfacePtr()); if (FAILED(hr)) { MessageBox(NULL, "Cannot add schema", "add", MB_OK); return 0; }
Что я уже пробовал:
Я пытался использовать MSXML6.dll но мои приложения другие модули зависят от MSXM2.dll-так что мне придется продолжать.