Coder969 Ответов: 2

В VS2015 SDK msxml2.h не содержит domdocument40


Я пытаюсь преобразовать некоторые старые проекты из vs2005 в vs2015 . Ниже приведена ошибка, которую я вижу при его создании в 2015 году . Я не вижу никаких проблем при строительстве в vs2005

error C2065: 'DOMDocument40': undeclared identifier


Ниже приведен код. Я получаю ошибку в CreateInstance

#include "MsXml2.h"
#import <msxml4.dll>

MSXML2::IXMLDOMDocumentPtr pConfigXSDDoc;  
MSXML2::IXMLDOMDocumentPtr pDeviceXSDDoc;  
// load the XML file
MSXML2::IXMLDOMDocument2Ptr pXMLDoc;   
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument40));


Что я уже пробовал:

After I change the below code from

#include "MsXml2.h"
#import <msxml4.dll>

to 
#import <msxml4.dll> rename_namespace(_T("MSXML"))

then the domdocument40 error was resolved . Below three errors still I am getting
CLSID_XMLSchemaCache40
CLSID_DOMDocument40
IID_IXMLDOMDocument2

Can I hardcode the classids which are mentioned in the below link and use it directly in my code <a href="https://msdn.microsoft.com/en-us/library/ms754671(v=vs.85).aspx">MSXML 4.0 GUIDs and ProgIDs</a>[<a href="https://msdn.microsoft.com/en-us/library/ms754671(v=vs.85).aspx" target="_blank" title="New Window">^</a>]

2 Ответов

Рейтинг:
1

Dattatraya Mengudale

Просто сделайте 2 шага, как показано ниже..

1. Укажите заголовок директивой #Include &ЛТ;в MSXML.ч&ГТ;
2. Переименовать в <domdocument40 и GT; к <domdocument&ГТ; только как ниже,

// Отформатируйте XML-файл. Для этого требуется таблица стилей
MSXML::IXMLDOMDocument2Ptr loadXML;
hr = loadXML.CreateInstance(__uuidof(DOMDocument));
if(FAILED(hr))
{
ShowError(loadXML);
вернуть;
}


Рейтинг:
0

Richard MacCutchan

Видеть MSXML 4.0 GUID и progid[^].


Coder969

Спасибо за ответ
После того, как я изменю приведенный ниже код с

#импорт <msxml4.dll>
с помощью msxml2 описывается пространство имен

к
#import <msxml4.dll> rename_namespace(_T("MSXML"))

затем ошибка domdocument40 была устранена . Ниже три ошибки все еще я получаю
CLSID_XMLSchemaCache40
CLSID_DOMDocument40
IID_IXMLDOMDocument2

В предоставленной ссылке я вижу классификаторы. Означает ли это, что я жестко закодирую в своем проекте CLSID_DOMDocument40 в {88d969c0-f192-11d4-a65f-0040963251e5} и использую его в своем проекте?

Richard MacCutchan

Нет, вы должны использовать символические имена, как указано в документации MSDN.

Coder969

Но я не нахожу символических имен в заголовочных файлах vs2015

Richard MacCutchan

Вам нужно изучить документацию, которая является единственным местом, где вы найдете то, что нужно сделать.