Thema: Delphi PChars und Dll

Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: PChars und Dll

  Alt 13. Aug 2006, 12:14
@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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat