Ошибка C2011: «MSXML2 :: IXMLDOMImplementation»: переопределение типа «struct» - PullRequest
5 голосов
/ 11 июня 2009

Я меняю свой проект C ++, который был ранее в VC6 и теперь переносится на VS 2008, чтобы использовать MSXML 6 вместо более раннего MSXML 3. Когда код был в VC6, мы использовали MSXML3, импортировав его

# import "msxml3.dll"

Это было заменено на

# import "msxml6.dll"

После этого, когда я компилирую проект, я получаю это и несколько других подобных ошибок Ошибка C2011: «MSXML2 :: IXMLDOMImplementation»: переопределение типа «struct»

Вышеуказанная ошибка в файле msxml3.tlh.

1) Почему msxml3 все еще используется?

2) Я сузил проблему до MSXML.h, который каким-то образом автоматически включается в мой проект. Почему это?

3) На какую версию MSXML ссылаются в MSXML.h?

4) Почему в мире VC ++ автоматически включается так много заголовочных файлов? Что если я не хочу, чтобы некоторые заголовочные файлы были включены?

5) Как правильно использовать MSXML6 в проекте c ++? #import, заголовочный файл ?????

6) Как мне решить эту проблему?

Дайте мне .net в любое время. Гораздо чище. Проект VC ++ - беспорядок.

Ответы [ 3 ]

2 голосов
/ 16 июня 2009

Проверьте синтаксис директивы #import. Вы можете переименовать импортированные элементы, используя атрибут rename в директиве import (или rename_namespace). Это разрешит конфликты с дублированными элементами.

См. Здесь: в MSDN

Иногда изменение порядка включения (да - попробуйте другой порядок операторов включения и импорта, закомментировав их)

Не борись с ошибками МС, просто перечеркни их;)

1 голос
/ 11 июня 2009

Посмотрите документацию MS на MSXML .

Они предполагают, что импорт .dll, который у вас есть, создаст пару файлов .thl и .tli. Убедитесь, что вы удалили их.

Убедитесь, что все включаемые каталоги указывают на правильное место.

Убедитесь, что вы не импортируете msxml3 в другое место вашего проекта.

Чтобы найти msxml.h, нажмите CTRL + SHIFT + F и найдите в вашем решении «msxml» <- обратите внимание на отсутствие .h, потому что, если вы импортировали его правильно, это нужно сделать следующим образом. : </p>

#include <msxml6.dll>

Попробуйте что-нибудь из этого ...

0 голосов
/ 12 июня 2009

Я бы попробовал переименовать msxml.h и сделать сборку. Это должно показать вам, что файл включает в себя msxml.h.

...