So ganz habe ich das in Delphi jetzt immer noch nicht verstanden, aber wenn die Funktion endet, dann gibt es auch keine Referenz mehr auf den String und er wird entfernt.
PAnsiChar
kopiert, laut Hilfe, den String nicht, deine Funktion gibt letztendlich eine Adresse auf etwas zurück, dass wohl direkt wieder abgeräumt wird.
Mit
StrNew
scheint man explizit den String auf den Heap zu schreiben und dort zu lassen.
Geschickter wäre es allerdings, in deinem Programm den Speicher anzulegen, die Adresse an die
DLL zu schicken und den Speicher auch selbst wieder im Programm freizuräumen, dann bräuchtest du das
delphi_freeString()
auch nicht.