Venkat Raghvan Ответов: 1

Добавление 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-так что мне придется продолжать.

1 Ответов

Рейтинг:
2