Cómo convertir un sistema (.net) C++\CLI
String^
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.
Cómo convertir un sistema (.net) C++\CLI
String^
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.
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++
¿Por qué no utilizar LPCTSTR tstr = context. marshal_as
Te he llevado a tu sensata idea, que por alguna razón se me había pasado por la cabeza. ¡Gracias! –
¿Cuál es la diferencia entre este mariscal y el mariscal en la otra respuesta? –
Es posible que desee intentar Marshal::StringToHGlobalUni, Marshal::StringToHGlobalAuto o Marshal::StringToHGlobalAnsi.
Recuerde que las cadenas asignadas no administradas deberán liberarse con Marshal::FreeHGlobal.
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