2011-01-25 2 views
1

Я пытаюсь скомпилировать проект VC++, который унаследовал, который использует MSXML2. Это проект ATL .EXE. Заголовочный файл включает в себя следующее:«MSXML2» не имеет проблемы с «IXMLDOMNode» в VC++ 2010

#include "msxml2.h" 

using namespace MSXML2; 

определения препроцессора включают __USE_MSXML2_NAMESPACE__, которые я добавил в проект, потому что без этого пространства имен MSXML2 было определено. Попытка построить этот проект я получаю много ошибок вида:

ошибка C2039: «IXMLDOMNode»: не является членом «MSXML2»

Эти ошибки продуцируются декларациях как следующий

CComPtr<MSXML2::IXMLDOMNode> pNode; 

Другие члены не найдены, включая IXMLDOMDocument и IXMLDOMNode.

+1

Можете ли вы включить msxml2.h, удалить __USE_MSXML2_NAMESPACE__ и использовать пространство имен MSXML2 и использовать CComPtr pNode ;? Это должно сработать. –

+0

Спасибо! Это действительно сработало, можете ли вы дать мне краткое объяснение, что происходит не так? – Nack

ответ

2

Вы можете это исправить

  1. Включите msxml2.h заголовок.
  2. Удалить USE_MSXML2_NAMESPACE и using namespace MSXML2 код.
  3. Используйте CComPtr<IXMLDOMNode> pNode; без пространства имен.

Я видел много проектов с использованием ключевого слова import, чтобы спросить Visual C++ генерировать заголовочный файл из TBL с использованием пространства имен MSXML2. Однако использование заголовка и ссылки на lib - мой любимый способ избежать использования ключевого слова import, поскольку он не является стандартом C++. Суть заключается в том, чтобы избежать смешивания двух подходов при обновлении старых проектов, что приведет к таким проблемам.

+0

Спасибо, исправлена ​​проблема и компиляция проекта сейчас! Я должен сказать, что удаление как инструкции «using», так и «MSXML2 ::» выглядит противоречивым для меня, но с надвигающимся сроком я не жалуюсь. – Nack

 Смежные вопросы

  • Нет связанных вопросов^_^