Cómo convertir de System::String* a Char* en Visual C++ 2005 o en Visual C++ .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 311259 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E311259
Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Runtime.InteropServices
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describen varias formas de convertir de System::String* a char* mediante extensiones administradas en Microsoft Visual C++ 2005 o en Microsoft Visual C++ .NET.

Método 1

PtrToStringChars le ofrece un puntero interior al objeto String real. Si pasa este puntero a una llamada a una función sin administrar, debe fijar primero el puntero para asegurarse de que el objeto no se mueve durante un proceso asincrónico de recolección de elementos no utilizados:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);	
				

Método 2

StringToHGlobalAnsi copia el contenido de un objeto String administrado a un montón nativo y, después, lo convierte sobre la marcha al formato ANSI (American National Standards Institute). Este método asigna la memoria de montón nativa necesaria:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);
				
Nota: en Visual C++ 2005 debe agregar la opción de compilador con compatibilidad con Common Language Runtime (/clr:oldSyntax) para compilar correctamente el ejemplo de código anterior. Para agregar la opción de compilador con compatibilidad con Common Language Runtime, siga estos pasos:
  1. Haga clic en Proyecto y, después, haga clic en Propiedades de nombreDeProyecto.

    Nota: nombreDeProyecto es un marcador de posición para el nombre del proyecto.
  2. Expanda Propiedades de configuración y haga clic en General.
  3. En el panel derecho, haga clic para seleccionar Compatible con Common Language Runtime, sintaxis antigua (/clr:oldSyntax) en la configuración de proyecto Compatible con Common Language Runtime.
  4. Haga clic en Aplicar y, después, haga clic en Aceptar.
Para obtener más información acerca de las opciones del compilador con compatibilidad con Common Language Runtime, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Estos pasos se aplican a todo el artículo.

Método 3

La clase CString de VC7 tiene un constructor que toma un puntero String administrado y carga CString con su contenido:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str); 
printf(str3);
				

Ejemplo de código completo

//compiler option: cl /clr  
#include <vcclr.h>
#include <atlstr.h>
#include <stdio.h>
#using <mscorlib.dll>
using namespace System;
using namespace System::Runtime::InteropServices;

int _tmain(void)
{
   	System::String * str = S"Hello world\n";

	//method 1
	const __wchar_t __pin * str1 = PtrToStringChars(str);
	wprintf(str1);	

	//method 2
	char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
	printf(str2);
	Marshal::FreeHGlobal(str2);

	//method 3
	CString str3(str); ntf(str3);

    return 0;
}
				

Referencias

Para ver otros artículos visitados frecuentemente sobre Visual C++ .NET de Microsoft Knowledge Base, visite el siguiente sitio Web de Microsoft:
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-US%3Bvcnet
Para obtener más información general acerca de Visual C++ .NET, visite el siguiente grupo de noticias de Microsoft Usenet:
Microsoft.public.dotnet.languages.vc

Propiedades

Id. de artículo: 311259 - Última revisión: lunes, 24 de julio de 2006 - Versión: 4.0
La información de este artículo se refiere a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard
  • Microsoft Visual C++ .NET 2002 Standard
Palabras clave: 
kbhowtomaster kbmanaged kbnewsgrouplink KB311259

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com