In questi giorni ho trovato un po' di difficoltà nel trovare documentazione e informazioni sulla conversione di Stringhe in char.
Il problema non è tanto in un progetto WindowsForms o Console (linguaggi C++ .NET) dove l'operazione è piuttosto semplice, ovvero basta scrivere:
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
void main( void )
{
DWORD len =50;
//ESEGUO L'ALLOCAZIONE DELL'ARRAY DI CHAR DI DIMENSIONE 50
char* c1 = (char *) malloc( len ); //oppure basta scrivere char* c1 = new char[50];
String *str = "Hello World";
//INSERISCO I VARI CARATTERI ALL'INTERNO DELL'ARRAY DI CHAR
for (int i=0;i<str->Length; i++){
c1[i] = Convert::ToChar(str->Substring(i,1));
}}}
Però se voglio fare lo stesso per un progetto DLL libreria di classi scritto in C++ come faccio?
C'è un esempio di microsoft piuttosto interessante che spiega come risolvere il problema.
L'esempio di trova a questo http://support.microsoft.com/kb/311259/
In particolare il codice è questo:
using namespace System::Runtime::InteropServices;
int _tmain(void)
{
//Grazie al Metodo Marshal::StringToHGlobalAnsi riesco a convertire una stringa in un'array di char e mi ritorna il puntatore al primo elemento
//dell'array.
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
....eseguo le operazioni su str2
//E' molto importante ricorda che la classe Marshal offre un insieme di metodi per l'allocazione della memoria non gestita.
//Quindi quando si lavora con la memoria non gestita non è più il Garbage ad occuparsi della deallocazione della memoria,
//ma sarà nostro compito (cioè compito del programmatore) occuparsi di ciò. Per la classe Marshal il metodo da richiamare è:
Marshal::FreeHGlobal(str2);
return 0;
}
Spero possa esservi d'aiuto questo blog.
Ciao
Sara