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

Traduzione articoli Traduzione articoli
Identificativo articolo: 311259 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato precedentemente pubblicato con il codice di riferimento I311259
Espandi tutto | Chiudi tutto

In questa pagina

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):
Microsoft.public.dotnet.languages.vc
Visitare il Supporto tecnico di Visual C++ .NET al seguente indirizzo (informazioni in lingua inglese):
Supporto tecnico di Visual C++ .NET (2002)

Proprietà

Identificativo articolo: 311259 - Ultima modifica: lunedì 29 aprile 2002 - Revisione: 1.0
Le informazioni in questo articolo si applicano a
  • Microsoft Visual C++ .NET 2002 Standard Edition
Chiavi: 
kbhowto kbhowtomaster kbinfo kbnewsgrouplink kbmanaged KB311259
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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