Al momento sei offline in attesa che la connessione Internet venga ristabilita

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

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I311259
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.

Torna all'inizio

Metodo 1

PtrToStringCharsdispone 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);	
Torna all'inizio

Metodo 2

StringToHGlobalAnsicopia 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);
Torna all'inizio

Metodo 3

La classe CStringdi 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);
Torna all'inizio

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;}
Torna all'inizio

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):Torna all'inizio
kbVC700
Proprietà

ID articolo: 311259 - Ultima revisione: 04/29/2002 22:08:00 - Revisione: 1.0

Microsoft Visual C++ .NET 2002 Standard Edition

  • kbhowto kbhowtomaster kbinfo kbnewsgrouplink kbmanaged KB311259
Feedback