Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Einbinden von .so Android Library in Delphi

  Alt 30. Aug 2022, 18:36
Du musst auf verschiedene Dinge achten:

1. Deine App und Deine .libXXX.so Datei müssen beide als 32 oder 64 Bit app/lib compiliert werden.

2. In Deiner libXXX.so muss die gewünschte Funktion "exportiert" werden. Beispiel:

Delphi-Quellcode:
library CrossPlatt;

uses
  System.SysUtils,
  System.Classes;

{$R *.res}

  Function Calc (A, B: Integer): Integer;
  begin
    Result := A * B;
  end;

  exports
    Calc;

begin
end.
3. Deine App importiert diese Funktion so:

Function Calc (A, B: Integer): Integer; external 'libCrossPlatt.so'; Dabei ist wirklich sorgsam darauf zu achten, dass auch alle Parameter exakt angegeben werden, wie in der .libbXXX.so
Datei. Groß und Kleinschreibung ist relevant!

4. Und - ich hatte es dunkel tatsächlich richtig in Erinnerung - Du musst unter Tools, Bibliothekspfad, das Verzeichnis angeben, wo die .libXXX.so Datei erzeugt wurde (siehe Anlage).

Dann klappt es mit der Kompilation, habe es gerade selber noch mal getestet.

Zum Schluss noch ein Hinweis - damit Du Dir nicht umsonst arbeit machst, falls Du das noch nicht wusstest: Du kannst in den .libXXX.so keine Formulare oder sowas unterbringen, das geht nur unter Windows. Du musst Dich also auf reine Funktionen beschränken, die irgendwas berechnen oder Daten verarbeiten und Dir dann das Ergebnis zurückgeben (jedenfalls war dies das Ergebnis meiner Tests und Recherchen von vor einiger Zeit, wer es anders weiß, ich lasse mich auch gerne belehren).

Ich persönlich binde meine (Linux) .libXXX.so oder MAC (.dylibs) alle immer zur Laufzeit ein. Das hat den Vorteil, dass man auch einfach mal die "DLL" austauschen kann, ohne das Programm neu kompilieren zu müssen, bzw. man kann flexibel zur Laufzeit evtl. alternative DLL's laden.
Miniaturansicht angehängter Grafiken
libs.jpg  

Geändert von Harry Stahl (30. Aug 2022 um 18:49 Uhr)
  Mit Zitat antworten Zitat