Italiano - English

C++/CLI String^ to char* conversion

Translation for this document is not available or is not complete,
if you are intrested to receive information please write to

A tecnique to convert 'System::String' to 'char*' in C++/CLI.

Ottenere questa conversione non è una operazione immediata. La funzioni  StringToHGlobalUni, StringToHGlobalAnsi, StringToHGlobalUni, possono essere utilizzate allo scopo.

StringToHGlobalAnsi copies the contents of a managed String object into native heap, and then converts it into American National Standards Institute (ANSI) format on the fly. This method allocates the required native heap memory.

Questa funzione alloca la memoria necessaria e copia il contenuto di una System::String^ in un buffer nella memoria heap. La copia, quindi la quantità di byte allocati, avviene utilizzando il formato richiesto (ANSI o UNICODE) quindi è necessario utilizzare il cast appropriato per la lettura della stringa.

La versione da utilizzare dipende dal formato con cui è impostato il proprio ambiente di sviluppo, oppure da tipo di variabile che si vuole in uscita. Solitamente Visual Studio è configurato con UNICODE, quindi utilizzare la versione relativa.

La versione AUTO seleziona automaticamente il tipo di formattazione

Quindi si procede in questo modo:

    char * a;
    String ^ str = "Pk Lab dot net";

    // (Marshalling)Conversione del tipo String a char *
    // Viene allocata memoria non gestita per contenere la stringa 
    a =  (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str);
     // Utilizzo della variabile char *
    printf(a);
     // Libero la memoria allocata per la stringa
     // La variabile 'a' non è piu' valida
    System::Runtime::InteropServices::Marshal::FreeHGlobal((System::IntPtr)(void*)a);

Allo stesso modo è possibile convertire da System::String^ a LPCWSTR

    LPCWSTR astring;
    System::String ^ str = "Pk Lab dot net";

    IntPtr ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalUni(str);
    astring = (LPCWSTR)ptr.ToPointer();

    ... utilizzare la variabile 'astring'
    
     // Libero la memoria allocata per la stringa
     // Ora la variabile 'astring' non è più valida
    System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr)

Vengono suggeriti anche altri metodi che usano PtrToStringChars o la classe CString.

Vedi anche:

 

Vote this page:

0 Comments:

Leave your comment:

Note:
  • Your email email will not be visible or used in any way, and is not required
  • Please keep comments relevant
  • Any content deemed inappropriate or offensive may be edited and/or deleted
  • HTML code is not allowed. Please use BBCode to format your text
    [b]bold[/b], [u]underline[/u], [i]italic[/i], [code]code[/code]
The coding examples presented here are for illustration purposes only. The author takes no responsibility for end-user use
This work is property of Pk Lab. You can use it for free but you must retain author's copyright.