Zitat von
Muetze1:
// Result vom Typ PChar!
Result := 'hallo ballo';
Result := PChar('hallo ballo');[/delphi]
Und hier verliert der String seine Gültigkeit mit verlassen der Procedure, da die Variable aus einer Adresse besteht (da Pointer), welche ihre Gültigkeit behält und im Register übergeben wird. Nur halt an der Adresse steht nix mehr.
Ich bin mir nicht sicher, aber könntes es auch so sein, dass gerade bei solchen Festlegungen, die Zeichenkette ('hallo hallo') im Datensegment (oder im Codesegment; falls man überhaupt noch von Segmenten sprechen kann; auf jeden Fall nicht Stack) der
DLL liegt. Und dies ist solange gültig, wie die
DLL im Speicher liegt. Den Zeiger, den du mit PChar('hallo hallo') erstellst, zeigt also irgendwo direkt in den Code der
DLL, wo die Zeichenkette liegt. Und bis freelibrary ist dieser gültig.
Anders wäre der Fall, wenn man eine Variable übergebn will (z.B. vom Stack), da müsste man in der
DLL mit getmem/stralloc arbeiten und im C dann wieder "free"-n.
Edit:
Oi, hier gabs ja schon eine Seite zwei. Den letzten Eintrag @Muetze hatt ich noch nicht gelesen. Aber genau der, trifft ja auf die Fragestellung zu.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.