![]() |
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:
frage nun: warum kann ich 20 dlls importieren aber 2 nicht.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; kann es irgendwie am dllentrypoint liegen? |
Re: loadlibrary problem
Wie sieht die Dll aus? Gibt es einen Unterschied zwichen den 2 und den restlichen?
|
Re: loadlibrary problem
Zitat:
beinhaltet ne form und wird über ne function exportiert |
Re: loadlibrary problem
Erzeugst du die Form vollkommen unabhänig vom Hauptprogramm oder benutzt du irgendwas aus dem Hauptprogramm?
|
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; |
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 :( |
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. |
Re: loadlibrary problem
Weitere Möglichkeit zum Anschauen der DLLs:
![]() 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. |
Re: loadlibrary problem
Zitat:
EDIT: @oldgrumpy: danke für den tipp, das tool habe ich bereits ;) |
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 13:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz