Zitat von
Sharky:
Hai ihr,
ich bin nun "gezwungen" mich endlich mit DLLs zu beschäftigen ;-)
Immer lese ich das es Probleme gibt wenn man einen Delphi-String an eine
DLL übergibt bzw. zurück bekommen möchte.
Bei TStrings dürfte das aber doch kein Problem sein oder? Nicht das ich da jetzt etwas mache und auf einmal fliegt es mir um die Flossen.
...
Ist das okay so oder habe ich da einen groben Fehler?
Hallo,
so allgemein für DLLs kann man das nicht sagen, aber Strings sind nun mal Pascal-spezifisch, in anderen Programmiersprachen, besonders die Cs, sind nullterminierte Zeichenfolgen üblich bzw. Pointer darauf. Die gibt es in Pascal als PChar auch schon lange, aber string und PChar sind getrennte Welten mit unterschiedlichen Funktionen.
Besonders das
Win32 API benutzt ausschliesslich PChar, das hat auch technische Vorteile gegenüber der Übergabe von Pascal-Strings an/von DLLs. Du must eben immer umwandeln (der Compiler weist dich schon drauf hin), oder du schreibst dir "Wrapper" wie z.B.
Delphi-Quellcode:
function LoadLibrary_ss (LibPath : ShortString) : THandle;
var lparr : array [0..255] of char;
begin
StrPLCopy (lparr,LibPath,255);
Result := LoadLibrary (lparr);
end;
aber das lohnt sich nur, wenn du die Funktion oft brauchst.
Du hast etwas anders umgewandelt, aber das muss ebenfalls funktionieren. Je nach Aufgabe könnte man in Delphi auch ganz mit arrays und PChar programmieren, aber für Pascal-Strings gibt es mehr Funktionen.
Gruss Reinhard