Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: DLL XE4 in Delphi 6 ohne sharemem

  Alt 6. Apr 2020, 09:51
ich versuche gerade eine Delphi XE4 DLL in Delphi 6 aufzurufen.
Ich habe dies auch schon einmal gemacht, aber ich bekomme es gerade nicht hin einen String zu übergeben und ich habe ehrlich gesagt keinen Plan warum es nicht geht. sharemem in beiden drin. Variablen Typ shortstring und auf der Seite der XE4 DLL kommt nur Datenmüll an.

Meine Frage daher nun wie gehe ich das ganze an wenn ich es ohne sharemem machen wollte.

Wie müssten beide Seiten aussehen damit ich Strings übergeben kann.
Wenn Du Strings ohne ShareMem übergeben willst (bzw. wenn das auch über verschiedene Delphi-Versionen hinweg funktionieren soll, denn die Implementation von ShareMem hat sich geändert, genaus wie der Default-String-Typ), bleiben Dir zwei Optionen:
  1. PAnsiChar
  2. WideString

PAnsiChar schaltet die automatische Speicherverwaltung für den String ab, es wird einfach ein Pointer auf das erste Zeichen übergeben. Jede Seite ist selbst dafür zuständig, das sauber zu implementieren (ist aber relativ einfach, eine Zuweisung auf Einen String reicht bzw. ein Typecast eines AnsiString auf PAnsiChar reicht).

Bei WideString wird der Speicher von Windows verwaltet. Das ist langsamer, aber das fällt in der Regel kaum ins Gewicht.

Und wie Du ja schon bemerkt hast: Wichtig ist, dass die Deklaration der Funktion auf beiden Seiten gleich ist, incl. der Calling-Convention.
Thomas Mueller
  Mit Zitat antworten Zitat