2012-03-20 13 views
9

Come convertire un System (.net) C++\CLIString^ in una stringa MFC C++ LPCTSTR.C++ CLI System.String^to MFC LPCTSTR

È molto facile ottenere uno LPCTSTR in String^, ma finora non ha trovato nulla nel farlo al contrario.

+1

nota che LPCTSTR è solo un puntatore char, quindi forse dovresti convertire String in CString o std :: string e quindi ottenere il puntatore in modo da non dover gestire la gestione della memoria – stijn

risposta

13

Se si dispone di Visual Studio 2008 o al di sopra, si dovrebbe essere in grado di farlo utilizzando la libreria C++/CLI marshalling, in questo modo:

#include <msclr\marshal.h> 

using namespace System; 
using namespace msclr::interop; 

... 

String^ cliString; 
marshal_context context; 

LPCTSTR cstr = context.marshal_as<const TCHAR*>(cliString); 

Maggiori informazioni sul marshalling tra i tipi su MSDN: Overview of Marshaling in C++

+0

Perché non usare LPCTSTR tstr = context. marshal_as (cliString) e lasciare che l'ambiente di compilazione si occupi del tipo di stringa effettivo? – TeaWolf

+0

Ti ho preso in considerazione la tua idea sensata, che per qualche ragione mi è sfuggita di mente. Grazie! –

+0

Qual è la differenza tra questo maresciallo rispetto al maresciallo nell'altra risposta? –