Blog Stats
  • Posts - 7
  • Articles - 0
  • Comments - 319
  • Trackbacks - 5

 

martedì 8 maggio 2007

Libreria di Classi C++ - Conversione da String a char

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

 

 

Copyright © Sara Fabris