2010-10-22 14 views
24

Sto cercando di utilizzare la libreria di marshalling nel mio progetto C++/CLI. Quando viene compilato con #include <msclr/marshal.h> viene visualizzato l'errore error C2872: 'IServiceProvider' : ambiguous symbol. La maggior parte delle risoluzioni sembra suggerire lo spostamento di #include <windows.h> come quello qui ->Ambiguous references, ma non ho quelle incluse. Tutto quello che ho è:Problema nella compilazione con marshal.h: errore C2872: 'IServiceProvider': simbolo ambiguo

using namespace System; 
using namespace System::Configuration; 
using namespace std; 
#include <msclr/marshal.h> 

Come si esegue il debug di questo problema?

risposta

40

Si fa, indirettamente, marshal.h lo include. Scarica una quantità enorme di identificatori nello spazio dei nomi globale. Le macro sono particolarmente scomode, molte di esse corrispondono ai nomi usati nel framework.

Un sacco di cose che marshal.h può fare anche dalla classe Maresciallo. Ma non posso aiutarti, non hai detto perché vuoi usarlo. È possibile risolvere questo particolare incidente mettendo direttiva #include prima le istruzioni using:

#include <msclr/marshal.h> 
using namespace System; 
using namespace System::Configuration; 
+0

Sto cercando di convertire String^in const char * – anivas

+4

Marshal :: StringToCoTaskMemAnsi + Marshal :: FreeCoTaskMem. –

+0

Si può usare anche System :: String^per evitare ustioni nell'intestazione – slater

2

Assicurarsi di avere solo il:

using namespace System; 

nel file cpp del progetto CLR e non nell'intestazione. Visual Studio lo aggiunge automaticamente all'intestazione durante la creazione di un progetto di libreria di classi CLR. Nel cpp stesso, gli include devono precedere "using namespace".

Problemi correlati