@Billi Berserker: Wenn dein String eine globale Variable ist funktioniert es ohne Probleme mit
result := PChar(GlobaleStringVariable);
es muss eben nur eine Variable sein die nach verlassen der Funktion noch gültig ist.
Das mit dem Stack war ein Fehler meiner seits. Bei Strings wird auf dem Stack nur ein Pointer abglegt welcher dann auf den eigentlichen String zeigt. Durch den Cast auf PChar wird ein Pointer zurück gegeben der auf den Speicher zeigt wo die Zeischen liegen. Nach verlassen der Funktion wird der Speicher zwar freigegeben (vom Memorymanager) aber ist immer noch im Prozess gültig. In 99% der Fälle wird dieser Speicher danach nicht wieder verwendet. In einigen Fällen wird aber an der Stelle wo ursprünglich die zeischen des Strings lagen was neues hinn geschrieben und somit ist dein String nicht mehr korrekt.
Und die
Unit ShareMem braucht man nur wenn man zwischen
DLL und Hauptprogramm mit Strings etc. arbeiten will wie direkt im Programm. Dies hat allerdings den Nachteil das Programme anderer Programmiersprachen die Funktionen nicht nutzen können weil diese keine Delphistrings kennen. Zudem muss die sharemem.dll mit dem Programm immer mitgegeben werden.