Originariamente inviato da Abenzka
Ciao a tutti, io volevo sapere se esiste un modo per convertire o trasferire una variabile di tipo PAnsiChar in una di tipo string e viceversa.
Il tipo string di Delphi viene rappresentato in memoria come un oggetto complesso, gestito pienamente dal memory manager di Delphi.

Questo consente di eseguire molte ottimizzazioni, sia per quanto riguarda l'occupazione di memoria, sia per la velocità complessiva d'esecuzione.

Però, molte delle funzioni API di Windows e la maggior parte delle librerie di terze parti richiedono come parametri dei PChar, puntatori a caratteri.

PAnsiChar e PChar sono equivalenti (nelle versioni attuali del compilatore Delphi).

Il tipo PChar rappresenta il puntatore all'indirizzo in memoria che contiene il primo carattere di una stringa terminata dal carattere "nullo", quello cioè con codice ASCII 0 (zero).

Quando c'è la necessità di passare ad una funzione una stringa nel formato terminato dal carattere nullo, è possibile eseguire un "cast" della variabile string per ottenere automaticamente, grazie a Delphi, la conversione della stringa memorizzata nella struttura dati complessa del memory manager al formato terminato dal carattere nullo.

Un esempio:
codice:
  MyProcedure(PChar(MyString));
Se MyProcedure accetta un parametro PChar e MyString è di tipo string, in questo modo Delphi crea "al volo" una rappresentazione della stringa compatibile con quella richiesta.

Parlando della gestione di un buffer contenente una stringa e rappresentato da una variabile di tipo PChar, il discorso si complica, poichè occorre fare uso di una serie di funzioni per allocare il buffer, riempirlo, modificarlo, ecc.

Può capitare di ricevere una variabile PChar che fa riferimento ad un buffer in memoria contenente una stringa da memorizzare all'interno di una variabile string (in poche parole, il percorso inverso rispetto al precedente); questa operazione si ottiene facendo semplicemente un'assegnazione.
codice:
var
  P: PChar;
  S: string;
begin
  S := P;
end;
Riconoscendo i tipi di dato con cui si ha a che fare, Delphi è in grado di produrre codice eseguibile che effettua automaticamente la conversione da null terminated string a Delphi native string. Più facile di così!!

Credo di averti detto abbastanza sull'argomento.

Ciao!