Wie übergibt man ein dynamisches Array von string an eine DLL-Bibliothek (DLL und Client in d7 geschrieben) ohne ShareMem Unit?

8

Ich habe auf dieser Seite gelesen, dass dynamische Arrays die ShareMem-Einheit benötigen, um richtig zu funktionieren.

Ich möchte jedoch eine DLL für andere Sprachen öffnen.

Kann mir jemand sagen, wie ich die Funktion und ihre Parameter deklarieren kann, um das Array von String zu übergeben?

Ist so etwas wirklich nicht ohne ShareMem erlaubt?

%Vor%

Danke für Ihre Hilfe!

    
user740144 05.05.2011, 15:31
quelle

1 Antwort

6

Ein dynamisches Array von Strings ist bereits ein Array von PWideChar/PAnsiChar (für WideString or UnicodeString/AnsiString ).

Dieses dynamische Array kann direkt aus den meisten Sprachen ohne Speicherkopie als Array von PWideChar/PAnsiChar :

zugeordnet werden

Vom Aufrufer:

%Vor%

Von dll:

%Vor%

Von einer C-DLL können Sie zum Beispiel char **argv anstelle von PPAnsiCharArray und void **argv anstelle von PPWideCharArray verwenden.

Dann können Sie einfach den PWideChar/PAnsiChar in den nativen String-Typ der Sprache zurück konvertieren.

Wenn Sie nur eine Delphi-DLL schreiben müssen, können Sie

verwenden %Vor%

oder sogar

%Vor%     
Arnaud Bouchez 05.05.2011, 15:57
quelle

Tags und Links