AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Library in Lazarus

Ein Thema von plusplus · begonnen am 10. Jun 2011 · letzter Beitrag vom 11. Jun 2011
Antwort Antwort
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#1

Library in Lazarus

  Alt 10. Jun 2011, 22:09
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
Grid Computing made simple - http://xerocoder.com
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: Library in Lazarus

  Alt 10. Jun 2011, 23:12
LoadLibrary() und GetProcAddress() sind WinAPI-Funktionen, die es nur unter Windows gibt.
Die Äquivalente in Linux dazu sind dlopen() bzw. dlsym()
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Library in Lazarus

  Alt 11. Jun 2011, 00:34
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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#4

AW: Library in Lazarus

  Alt 11. Jun 2011, 07:18
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.
Grid Computing made simple - http://xerocoder.com
  Mit Zitat antworten Zitat
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#5

AW: Library in Lazarus

  Alt 11. Jun 2011, 07:25
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.
Grid Computing made simple - http://xerocoder.com

Geändert von plusplus (11. Jun 2011 um 07:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Library in Lazarus

  Alt 11. Jun 2011, 09:40
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (11. Jun 2011 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Library in Lazarus

  Alt 11. Jun 2011, 09:50
Linux-DLL (oder wie die da heißen)
Shared Object, kurz SO, Dateiendung .so
unter Mac Dynamic Library, Dateiendung .dynlib
  Mit Zitat antworten Zitat
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#8

AW: Library in Lazarus

  Alt 11. Jun 2011, 12:09
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.
Grid Computing made simple - http://xerocoder.com
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Library in Lazarus

  Alt 11. Jun 2011, 12:15
Zitat:
3. cmem
Das ist eigentlich überall so, wo der Speichermanager standardmäßig nicht geteilt wird.
> siehe Delphi-Referenz durchsuchenShareMem und Co.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf