2009-06-11 5 views
5

Je suis en train de modifier mon projet C++, qui était auparavant dans VC6 et qui est en cours de migration vers VS 2008, pour utiliser MSXML 6 au lieu de MSXML 3. 3. MSXML 3. 3.lorsque le code était en VC6 que nous utilisions MSXML3 en l'importantErreur C2011: 'MSXML2 :: IXMLDOMImplementation': redéfinition du type 'struct'

# import "msxml3.dll" 

cela a été remplacé par

# import "msxml6.dll" 

Après cela, quand je compilez le projet, je reçois cela et plusieurs autres erreurs similaires erreur C2011: 'MSXML2 :: IXMLDOMImplementatio n ': redéfinition du type' struct '

L'erreur ci-dessus se trouve dans le fichier msxml3.tlh.

1) Pourquoi msxml3 est toujours utilisé?

2) J'ai réduit le problème à MSXML.h qui est en quelque sorte inclus automatiquement dans mon projet. Pourquoi est-ce?

3) Quelle version de MSXML est référencée dans MSXML.h?

4) Pourquoi dans le monde VC++ inclut-il automatiquement autant de fichiers d'en-tête? Que faire si je ne veux pas que certains fichiers d'en-tête soient inclus?

5) Quelle est la bonne façon d'utiliser MSXML6 dans un projet C++? #import, fichier d'en-tête ?????

6) Comment résoudre ce problème?

Donnez-moi .net n'importe quand. Beaucoup plus propre. Un projet VC++ est un gâchis.

Répondre

1

Jetez un oeil à the MS docoumentation on MSXML.

Ils suggèrent que l'importation du fichier .dll que vous avez crée un couple de fichiers .thl et .tli. Assurez-vous que vous avez supprimé ceux-ci.

Assurez-vous que les répertoires inclus pointent vers le bon emplacement. Assurez-vous absolument que vous n'importiez pas msxml3 ailleurs dans votre projet. Pour trouver le msxml.h faites CTRL + MAJ + F et recherchez votre solution entière pour 'msxml' < - notez l'absence du .h parce que si vous l'aviez importé correctement, il devrait être fait comme suit:

#include <msxml6.dll> 

Essayez un peu de cette ...

+0

pouvez-vous # inclure une DLL? – bobbyalex

+0

J'ai nettoyé le projet. Les fichiers tlh et tli sont recréés automatiquement. J'ai cherché toute la solution pour msxml3 et il n'y a plus rien. Tout est msxml6. – bobbyalex

0

Je vais essayer de renommer MSXML.h et de faire une construction. Cela devrait vous montrer quel fichier inclut msxml.h.

2

Vérifiez la syntaxe de la directive #import. Vous pouvez renommer les éléments importés en utilisant l'attribut rename dans la directive d'importation (ou rename_namespace). Cela résoudra les conflits avec les éléments dupliqués.

Voir ici: in MSDN

Parfois, le changement de l'ordre d'inclusion (oui - changer l'ordre des INCLUDE et des déclarations d'importation en les commentant)

Ne pas se battre avec les erreurs MS, juste croix eux;)

Questions connexes