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:
- PAnsiChar
- 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.