Externe Bibliotheken importieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Externe Bibliotheken importieren

Beitrag von bembulak »

Hi und guten Morgen!

Kann mir jemand einen Tip geben, wie man damit beginnt, externe Bibliotheken (*.dll und *.so) zu nutzen? Ich weiß jetzt ehrlich gesagt gar nicht, wie und wo ich beginnen soll.
Danke.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Externe Bibliotheken importieren

Beitrag von theo »

Meinst du in C geschriebene?
Wenn du den C header hast, kannst du dir mit dem Tool h2pas ein Pascal interface machen lassen.
Benötigt u.U. noch etwas Nachbearbeitung.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Externe Bibliotheken importieren

Beitrag von bembulak »

Hi,

hab' keine Header und die DLL ist in PureBasic geschrieben (was C-konforme DLLs erstellt).

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Externe Bibliotheken importieren

Beitrag von theo »

Hab ich noch nie gemacht. Irgend eine Interface Deklaration brauchst du natürlich schon.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Externe Bibliotheken importieren

Beitrag von bembulak »

:)
War einfacher, als ich dachte.
Es ist zwar nur zu testzwecken, hat aber dennoch gut funktioniert:

Es reicht, die Funktion/Procedure so aufzurufen (zumindest in meinem Test war es so):

Code: Alles auswählen

function DoSomething(): Integer; external 'test.dll';
Wobei "DoSomething" auch der Name der Funktion in der DLL ist.

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Externe Bibliotheken importieren

Beitrag von theo »

bembulak hat geschrieben: Wobei "DoSomething" auch der Name der Funktion in der DLL ist.
Schon klar, wenn du diesen Namen und die Parameter kennst, das meinte ich ja.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Externe Bibliotheken importieren

Beitrag von mschnell »

Delphi kann verschiedene Library-Formate (z.B. dll) "importieren" uns schreibt dann automatisch eine Interface-Unit. Kann Lazarus das nicht ?

-Michael

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Externe Bibliotheken importieren

Beitrag von Targion »

mschnell hat geschrieben:Delphi kann verschiedene Library-Formate (z.B. dll) "importieren" uns schreibt dann automatisch eine Interface-Unit. Kann Lazarus das nicht ?
Echt? Das wäre ja genial! Ab welcher Version macht Delphi das denn? Ich habe noch nie von einer solchen Funktion gehört. (aber ich bin auch schon einige Zeit bei Lazarus und verfolge Delphi nicht mehr so mit)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Externe Bibliotheken importieren

Beitrag von mschnell »

D7 konnte es bereits.

unter "Komponenten" -> "Komponente importieren"

wird u.a. "Typbibliothek" angeboten.

Delphi scannt dann die in Frage kommenden Dateien (*.dll, *.ocx, *.tlb, *.api, *.exe) und bietet diejenigen zur Auswahl an, die dynamisch linkbare FGunktionen enthalten.

Bei Lazarus habe ich noch keinen Bedarf für so etwas, hatte aber immer vermutet dass es auch angeboten würde....

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Externe Bibliotheken importieren

Beitrag von theo »

Das geht aber nur für COM, nicht für normale DLL's.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Externe Bibliotheken importieren

Beitrag von pluto »

War das nicht so, dass man zwar an einer Liste von Funktionen innerhalb einer DLL/SO ran kommt, aber nicht daran wie sie aufgerufen wird ?
Warum ist das eigentlich so ? Wenn es schon eine Liste der Funktionen gibt die, die DLL/SO Datei enthält, könnte dort auch dran stehen wie sie aufgerufen wird, würde bestimmt einiges vereinfachen.
Ich hatte das mal vor einiger Zeit versucht, bin aber gescheitert. Ich hat es mit diesem Tool versucht: h2pas. Wobei ich mir sicher war das es eine C-Header Datei war. Habt ihr damit schon Erfolg gehabt ?
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Externe Bibliotheken importieren

Beitrag von mschnell »

theo hat geschrieben:Das geht aber nur für COM, nicht für normale DLL's.
Ich meine, wir haben das mit (anscheinend) normalen DLLs gemacht. Da das ein Kollege getan hat, bin ich aber nicht ganz sicher.

Ich weiß nicht, was für Bedingungen die importierbaren Dateien genau erfüllen müssen. Offensichtlich muss in der Datei (oder sonst wo) eine Beschreibung existieren, welche Funktionen welche Aufruf-Nummer hat und welche Parameter sie erwartet.

Keine Ahnung ob es "COM" heißt, wenn so eine Beschreibung existiert.

Keine Ahnung ob es für Linux "so"-Dateien auch eine Spezifikation gibt, die es erlaubt so eine Beschreibung in der Datei unterzubringen.

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Externe Bibliotheken importieren

Beitrag von theo »

mschnell hat geschrieben:
theo hat geschrieben:Das geht aber nur für COM, nicht für normale DLL's.
Ich meine, wir haben das mit (anscheinend) normalen DLLs gemacht. Da das ein Kollege getan hat, bin ich aber nicht ganz sicher.
Gefährliches Halbwissen ;-)
http://en.wikipedia.org/wiki/Component_ ... _libraries" onclick="window.open(this.href);return false;

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Externe Bibliotheken importieren

Beitrag von Targion »

Demnach ist es unter Linux nicht möglich. Aber unter Linux ist es auch kein Problem schnell an C-Header zu kommen.
Unter Windows will MS mit .NET COM sowieso bald begraben.
Zuletzt geändert von Targion am Sa 19. Sep 2009, 19:42, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Externe Bibliotheken importieren

Beitrag von mschnell »

Da kein "Interface" und kein "GUID" verwendet wurde. war es wohl doch kein COM ...

-Michael

Antworten