Hmm... das könnte schief gehen. machs lieber so:
Delphi-Quellcode:
type
PString = ^TStringRec;
TStringRec = record
str: string;
end;
Und dann musst du das noch finalisieren:
Delphi-Quellcode:
if Assigned(ListItem.Data) then
begin
Finalize(ListItem.Data);
Dispose(ListItem.Data);
end;
Das Finalisieren ist wichtig, damit Delphi auch den String selbst freigibt. Ein String ist nänmlich eigentlich eine Klasse, und ich hab jetzt nicht genügend Code von dir um zu sehen, ob da alles koscher abläuft.
Du musst übrigens nicht casten, denn wenn du den Speicherbereich per New() alloziiert hast, weiß der MemoryManager, wie viel er an dieser Speicheradresse alloziiert hat. Und Dispose weiß dann auch ohne cast, wie viel freigegeben werden muss.
EDIT: Mooooment mal... ist "PString" schon in Delphi-Systemunits deklariert? Dann sollte die Compilermagic da eh kräftig mitmischen... zeigt mir das doch mal