HOW TO: Eseguire la conversione da System::String* a Char* in Visual C++ .NET

Sommario

In questo articolo vengono discussi i diversi modi di eseguire la conversione da System::String* a char* utilizzando estensioni gestite in Visual C++ .NET.


Metodo 1

PtrToStringChars
dispone di un puntatore interno all'oggetto String effettivo. Se si passa questo puntatore a una chiamata di funzione non gestita, è necessario bloccare il puntatore per assicurare che l'oggetto non venga spostato durante una procedura di Garbage Collection asincrona:
//#include <vcclr.h>
System::String * str = S"Hello world\n";
const __wchar_t __pin * str1 = PtrToStringChars(str);
wprintf(str1);

Metodo 2

StringToHGlobalAnsi
copia il contenuto dell'oggetto gestito String in unheap nativo, quindi lo converte immediatamente nel formato ANSI (American National Standards Institute). Questo metodo esegue l'allocazione della memoria dell'heap nativo necessaria:
//using namespace System::Runtime::InteropServices;
System::String * str = S"Hello world\n";
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
printf(str2);
Marshal::FreeHGlobal(str2);

Metodo 3

La classe
CString
di Visual Studio .NET dispone di un costruttore che accetta un puntatore a String gestito e carica CString con il relativo contenuto:
//#include <atlstr.h>
System::String * str = S"Hello world\n";
CString str3(str);
printf(str3);

Codice di esempio 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);
printf(str3);

return 0;
}


RIFERIMENTI

Per ulteriori informazioni generali su Visual C++ .NET, accedere al seguente newsgroup Usenet (informazioni in lingua inglese):
Visitare il Supporto tecnico di Visual C++ .NET al seguente indirizzo (informazioni in lingua inglese):
Proprietà

ID articolo: 311259 - Ultima revisione: 29 apr 2002 - Revisione: 1

Feedback