Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Library in Lazarus (https://www.delphipraxis.net/160990-library-lazarus.html)

plusplus 10. Jun 2011 22:09

Library in Lazarus
 
Ich habe ein DLL in Lazarus geschrieben und gebrauche dynlibs.LoadLibrary, GetProcAddress um den dll zu laden und die funktion aufzurufen.

In windows get alles sehr gut aber in linux und mac nicht. Weis jemand warum dass sein kann?

hier ist ein test projekt: http://gridplusplus.com/downloads/LibTest.rar

blackfin 10. Jun 2011 23:12

AW: Library in Lazarus
 
LoadLibrary() und GetProcAddress() sind WinAPI-Funktionen, die es nur unter Windows gibt.
Die Äquivalente in Linux dazu sind dlopen() bzw. dlsym()

igel457 11. Jun 2011 00:34

AW: Library in Lazarus
 
Ich sehe jetzt direkt keinen Fehler in deinem Code.

Ich selbst verwende Platformunabhängig (getestet unter Win32, Win64, Linux 32 Bit, Linux 64 Bit) folgenden Code, vielleicht findest du ja einen Unterschied:
http://andorracommons.svn.sourceforg...18&view=markup

Beispielaufrufe:
http://andorracommons.svn.sourceforg...ew=markup#l167

plusplus 11. Jun 2011 07:18

AW: Library in Lazarus
 
Zitat:

Zitat von blackfin (Beitrag 1105772)
LoadLibrary() und GetProcAddress() sind WinAPI-Funktionen, die es nur unter Windows gibt.
Die Äquivalente in Linux dazu sind dlopen() bzw. dlsym()

Danke fuer den hinweis, daher habe Ich ja dynlibs.LoadLibrary geschrieben, das soll ja der cross function sein.

plusplus 11. Jun 2011 07:25

AW: Library in Lazarus
 
Zitat:

Zitat von igel457 (Beitrag 1105775)
Ich sehe jetzt direkt keinen Fehler in deinem Code.

Danke fuer die quelle, Ich habe es mir angeschaut und Ich denke dass Ich das selbe mache. Um den Float Point problem zu ueberkommen kann man ja auch SafeLoadLibrary gebrauchen.
Was Ich aber nicht verstehe ist dass mein code nicht auf Linux und Mac funkzioniert. Ich habe schon beinahe die ganze lazarus forum nach gesehen, nix, nada. Echt komisch, Ich weis dass loadlibrary geht aber GetProcAddress scheint den entrypoint nicht zu finden, Ich denke dass linux/mac den namen anders exportiert.

himitsu 11. Jun 2011 09:40

AW: Library in Lazarus
 
versuch mal
Delphi-Quellcode:
unit lib;

...

exports
   callme name 'callme';
Ich weiß von C-Compilern, daß sie gerne noch die Parameter mit in den Exportnamen einkodieren/anhängen.
Eventuell macht Lazarus FreePascal das hier auch, wenn man diesen den Namen generieren läßt.

Eventuell würde ein Blick in eine fertig kompilierte Linux-DLL (oder wie die da heißen) klarheit schaffen.

implementation 11. Jun 2011 09:50

AW: Library in Lazarus
 
Zitat:

Zitat von himitsu (Beitrag 1105802)
Linux-DLL (oder wie die da heißen)

Shared Object, kurz SO, Dateiendung .so
unter Mac Dynamic Library, Dateiendung .dynlib

plusplus 11. Jun 2011 12:09

AW: Library in Lazarus
 
Ich habe eine loesung gefunden,
1. alle methods muessen in the library unit exportiert werden.
2. auf Linux und Mac ist es besser um cdecl zu benuzten
3. um grosse string zu unterstuetzen muss man cmem als erstes in the uses clause eingeben fuer beide lib und lib gebraucher.

Also es funkzioniert.

Code:
library test;
...

exports //<- hier einlegen

begin
end.

himitsu 11. Jun 2011 12:15

AW: Library in Lazarus
 
Zitat:

3. cmem
Das ist eigentlich überall so, wo der Speichermanager standardmäßig nicht geteilt wird.
> siehe Delphi-Referenz durchsuchenShareMem und Co.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz