Moin Michael,
der Inhalt eines "normalen" Strings in Delphi beginnt bei der Adresse, die die Funktion zurückliefert.
Davor liegen dann noch 4 Byte (als Cardinal) Länge (und davor noch 4 Byte Referenzcount. Wo sind die eigentlich
)
Delphi-Quellcode:
// Platz schaffen für die Länge des zu reservierenden Strings
Inc(Size, SizeOf(Cardinal));
// Speicher reservieren für Länge und Inhalt
// Result enthält jetzt die Adresse des reservierten Speichers
GetMem(Result, Size);
// An dieser Stelle wird jetzt die Länge gespeichert
// Durch das ^ wird dereferenziert, also an die Adresse geschrieben, auf die Result zeigt.
// Durch Cardinal() wird dann ein Type-Cast durchgeführt, damit man auch Size dorthin schreiben kann,
// was der Compiler sonst unterbinden würde
Cardinal(Pointer(Result)^) := Size;
// Jetzt wird Result auf den Anfang des Inhaltes gesetzt
// Die Länge steht also auf Result - 4
Inc(Result, SizeOf(Cardinal));