Wie wandelt man eine String-Variable in eine PChar-Variable um?


Windows-API-Funktionen benötigen anstelle von String-Variablen immer PChar-Variablen. Wie kann man eine String-Variable in eine PChar-Variable umwandeln?

Man muß dabei zwischen Strings mit definierter Länge und den ab D2 verfügbaren nicht längenbegrenzten HugeStrings unterscheiden:

var PC : PChar;
     S : string;

1. Huge-Strings:

Da PChar-Variablen ebenfalls keine feste Länge haben, sondern mit einem #0-Zeichen terminiert werden, geht die Umwandlung von HugeStrings in PChar einfach per Typcasting:

PC := PChar(S);

2. Short-Strings:

Für kurze Strings (also die alten 255Byte-Strings aus TP und D1) funktioniert das Typecasting nicht, da gibt es zwei andere Möglichkeiten:

2.a StrPCopy:

Für die beabsichtigte Umwandlung gibt es die Routine "StrPCopy". In diesem Falle muß man Speicher für die PChar-Variable reservieren, da der Inhalt der String-Variablen in eine neue PChar-Variable kopiert wird. Nicht vergessen, nach getaner Arbeit den Speicher wieder freizugeben!

PC := StrAlloc(255);
StrPCopy(PC,S);
 ...
StrDispose(PC);

2.b Zeiger übergeben:

Eine PChar-Variable ist nichts anderes, als ein Zeiger auf eine Kette von Char-Zeichen, welche mit dem ASCII-Zeichen #0 terminiert ist. Man kann nun der PChar-Variablen einfach einen Zeiger auf das erste Zeichen des Strings im Speicher zuweisen. In diesem Falle muß man keinen neuen Speicher allozieren, man muß aber manuell dafür sorgen, daß der String durch das ASCII-Zeichen #0 abgeschlossen wird (sonst kann es zu seltsamen Effekten kommen):

S := S+#0;
PC := @S[1];

Für die umgekehrte Umwandlung von PChar nach String kann man ebenfalls wieder ein einfaches Typecasting verwenden oder die Funktion "StrPas".

Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ