2009-06-11 14 views
5

Sto modificando il mio progetto C++, che era precedente in VC6 e ora migrato a VS 2008, per utilizzare MSXML 6 invece del precedente MSXML 3. quando il codice era in VC6 stavamo usando MSXML3 importandoloErrore C2011: 'MSXML2 :: IXMLDOMImplementation': 'struct' tipo ridefinizione

# import "msxml3.dll" 

questo è stato sostituito con

# import "msxml6.dll" 

Dopo questo, quando compilo il progetto ottengo questo e molti altri errori simili Errore C2011: 'MSXML2 :: IXMLDOMImplementatio n ':' struct 'tipo ridefinizione

L'errore sopra riportato è nel file msxml3.tlh.

1) Perché è ancora in uso msxml3?

2) Ho ristretto il problema a MSXML.h che è in qualche modo incluso automaticamente nel mio progetto. Perchè è questo?

3) A quale versione di MSXML viene fatto riferimento in MSXML.h?

4) Perché nel mondo VC++ include automaticamente tanti file di intestazione? Cosa succede se non desidero includere alcuni file di intestazione?

5) Qual è il modo corretto di utilizzare MSXML6 in un progetto C++? #import, file di intestazione ?????

6) Come posso risolvere questo problema?

Datemi .net in qualsiasi momento. Molto più pulito Un progetto VC++ è un casino.

risposta

1

Dai un'occhiata allo the MS docoumentation on MSXML.

Essi suggeriscono che l'importazione del file .dll come si creerà un paio di file .thl e .tli. Assicurati di averli cancellati.

Assicurarsi che qualsiasi directory di inclusione punti al posto giusto.

Assicurarsi assolutamente di non importare msxml3 da qualche altra parte nel progetto.

Per trovare il msxml.h fai CTRL + MAIUSC + F e cerca l'intera soluzione per 'msxml' < - nota la mancanza di .h perché se lo avessi importato correttamente, dovrebbe essere fatto come segue:

#include <msxml6.dll> 

Prova po 'di quella ...

+0

puoi # includere una dll? – bobbyalex

+0

Ho pulito il progetto. I file tlh e tli vengono ricreati automaticamente. Ho cercato l'intera soluzione per msxml3 e non è rimasto nulla. È tutto msxml6. – bobbyalex

0

mi piacerebbe provare rinominando MSXML.h e facendo una generazione. Questo dovrebbe mostrarti quale file include msxml.h.

2

Verificare la sintassi della direttiva #import. È possibile rinominare gli elementi importati utilizzando l'attributo rename sulla direttiva di importazione (o rename_namespace). Risolverà i conflitti con elementi duplicati.

Vedi qui: in MSDN

A volte il cambiamento dell'ordine inclusione (sì - prova diverso ordine di includere e le dichiarazioni di importazione da loro commentando)

Non combattere con gli errori MS, appena croce loro;)

Problemi correlati