Come convertire un System (.net) C++\CLI
String^
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.
Come convertire un System (.net) C++\CLI
String^
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.
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++
Perché non usare LPCTSTR tstr = context. marshal_as
Ti ho preso in considerazione la tua idea sensata, che per qualche ragione mi è sfuggita di mente. Grazie! –
Qual è la differenza tra questo maresciallo rispetto al maresciallo nell'altra risposta? –
Si consiglia di provare Marshal::StringToHGlobalUni, Marshal::StringToHGlobalAuto o Marshal::StringToHGlobalAnsi.
Ricordare che le stringhe non gestite allocate dovranno essere liberate con Marshal::FreeHGlobal.
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