2012-03-20 31 views
9

Cómo convertir un sistema (.net) C++\CLIString^ en una cadena MFC C++ LPCTSTR.C++ CLI System.String^a MFC LPCTSTR

Es muy fácil obtener un LPCTSTR en String^, pero hasta el momento no hemos encontrado nada para hacerlo al revés.

+1

tenga en cuenta que LPCTSTR es solo un puntero de char, por lo que tal vez prefiera convertir String a CString o std :: string y luego obtenga el puntero para no tener que ocuparse de la gestión de memoria – stijn

Respuesta

13

Si tiene Visual Studio 2008 o superior, debe ser capaz de hacer esto utilizando la biblioteca de C++/CLI cálculo de referencias, así:

#include <msclr\marshal.h> 

using namespace System; 
using namespace msclr::interop; 

... 

String^ cliString; 
marshal_context context; 

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

Más información sobre el cálculo de referencias entre los tipos en MSDN: Overview of Marshaling in C++

+0

¿Por qué no utilizar LPCTSTR tstr = context. marshal_as (cliString) y dejar que el entorno de compilación se encargue del tipo de cadena real? – TeaWolf

+0

Te he llevado a tu sensata idea, que por alguna razón se me había pasado por la cabeza. ¡Gracias! –

+0

¿Cuál es la diferencia entre este mariscal y el mariscal en la otra respuesta? –