Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi loadlibrary problem (https://www.delphipraxis.net/78128-loadlibrary-problem.html)

Sauerkrautpoet 29. Sep 2006 12:48


loadlibrary problem
 
ich habe eine anwendung die sich aus einem unterverzeichnis dll-dateien sucht und siese dynamisch lädt.
nun habe ich bei 2 dll´s das problem, dass ich sie nicht laden kann. alle anderen (um die 20 dlls) kann ich einwandfrei laden.
ich bekomme bei den 2 betroffenen bibliotheken jedes mal die fehlermeldung:
"EApplication Error: ein anwendungsobjekt kann nicht in einem shared object erzeugt werden."
das lustige an dem fehler ist die tatsache, dass alle projekte nach dem gleichen muster gestrickt sind. und nur bei 2en machts BÄNG.
der fehler tritt genau beim befehl:
Delphi-Quellcode:

        try

      dllid := LoadLibrary(PChar(filename));

    except
      MessageBox(0,'Beim Einlesen einer Bibliothek kam es zu einem Fehler!', '', MB_ICONQUESTION or MB_OK);
      result:=0;
    end;
frage nun: warum kann ich 20 dlls importieren aber 2 nicht.

kann es irgendwie am dllentrypoint liegen?

mkinzler 29. Sep 2006 12:55

Re: loadlibrary problem
 
Wie sieht die Dll aus? Gibt es einen Unterschied zwichen den 2 und den restlichen?

Sauerkrautpoet 29. Sep 2006 13:05

Re: loadlibrary problem
 
Zitat:

Zitat von mkinzler
Wie sieht die Dll aus? Gibt es einen Unterschied zwichen den 2 und den restlichen?

exakt nach dem gleichen muster gestrickte dll:
beinhaltet ne form und wird über ne function exportiert

ste_ett 29. Sep 2006 13:26

Re: loadlibrary problem
 
Erzeugst du die Form vollkommen unabhänig vom Hauptprogramm oder benutzt du irgendwas aus dem Hauptprogramm?

Luckie 29. Sep 2006 13:33

Re: loadlibrary problem
 
Windows API Funktionen werfen keine Exception, wenn sie fehlschlagen, sondern geben meist einen Fehlercode zurück, den man auswerten kann, um festzustellen, warum die Funktion fehlgeschlagen ist:
Delphi-Quellcode:
hLib := LoadLibrary(...);
if hLib = 0 then
begin
  s := SysErrorMessage(GetLastError());
  ShowMessage(s);
end;

Sauerkrautpoet 29. Sep 2006 14:13

Re: loadlibrary problem
 
@ste_ett:
ich nutze nichts aus dem hauptprogramm, jedes form hat sein eigenes datenmodul auf das es zugreift.

@Luckie:
errormessage: "eine dll initialisierungsroutine ist fehlgeschlagen"

ich bin genauso schlau (oder auch nicht) wie vorher :(

Muetze1 29. Sep 2006 14:18

Re: loadlibrary problem
 
Mit anderen Worten: Der Code im Initialization Teil bzw. zwischen Begin/End. in der DLL bzw. die Procedure die du in diesem Teil der DLLProc Variablen zugewiesen hast, gibt einen Fehler zurück.

Andere Möglichkeit: Die DLL benötigt eine statisch gelinkte andere DLL, welche sie nicht finden kann. Du kannst die statischen Abhängigkeiten von anderen DLL's einfach über das mitgelieferte TDump Tool von Borland rausfinden. Dieses findest du im Normalfall im BIN Ordner deiner Delphi Installation. Das Tool benötigt die DLL als Parameter und gibt dir die Informationen zu der DLL aus (z.b. in Datei umleiten zum lesen). Unter "Imports" werden alle von fremden DLLs statisch gelinkte Funktionen aufgelistet und in welcher DLL sie sein sollten.

OldGrumpy 29. Sep 2006 14:22

Re: loadlibrary problem
 
Weitere Möglichkeit zum Anschauen der DLLs: Der Dependency Walker - ein manchmal wirklich unverzichtbares Tool :)

Der zeigt Dir dann auch gleich welche DLLs von wo aus angezogen werden, sehr nützlich bei Versionskonflikten. Listet ausserdem auch alle jeweils ex- und importierten Funktionen an.

Sauerkrautpoet 29. Sep 2006 14:54

Re: loadlibrary problem
 
Zitat:

Zitat von Muetze1
...mitgelieferte TDump Tool von Borland rausfinden. ...

dafür habe ich bereits dependency walker..so richtig voran bringt mich das auch nicht, weil keine imports gefunden werden, nur meine 3 exports.

EDIT:
@oldgrumpy: danke für den tipp, das tool habe ich bereits ;)

OldGrumpy 29. Sep 2006 16:01

Re: loadlibrary problem
 
Alternativ kannste mir eine der DLLs auch mal zugänglich machen, dann schau ich mal rein, wo das Ding auf die Nase fällt. Btw, GAR KEINE Imports? Das wäre aber doch schon etwas ungewöhnlich :) Unter w2k ist dem OS-Loader so ein Executable z.B. so suspekt dass das Laden verweigert wird :) (Genauer: In den Imports muss eine Systemkomponente auftauchen, ich bin mir gerade nicht sicher obs user32.dll oder kernel32.dll war, müsste ich mal nachschauen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Seite 1 von 3  1 23      

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