![]() |
Delphi-Version: 5
LoadLibrary unter Windows 7
Moin,
ich muss eine DLL Datei einbinden und mach das über LoadLibrary. Unter Win XP funktioniert auch alles super, aber unter Windows 7 liefer LoadLibrary nur eine 0 zurück, ohne Fehlermeldung o.ä. Um Pfad Schwierigkeiten zu vermeiden hab ich die DLL mal direkt auf C gelegt, leider ohne Erfolg. Gibt es da generelle Schwierigkeiten mit DLLs laden und Windows 7? Edit: Delphi Version ist nicht wie oben angegeben Delphi 5, sondern 2006 |
AW: LoadLibrary unter Windows 7
Soweit ich weiß ist c:\ für W7-Anwendungsprogramme eine NoGoAerea.
Zum Testen solltest Du vielleicht die Echse und die DLL einmal in ein Verzeichnis packen, auf das Du als Benutzer auf jeden Fall Zugriff hast. (Eigene Dateien ?) Gruß K-H (jetzt sind wir bei w7 und die plattenverwaltung ist immer noch bei DOS3.2) |
AW: LoadLibrary unter Windows 7
Hast du vielleicht vergessen den kompletten Pfad anzugeben? Aus Sicherheitsgründen sucht Windows standardmäßig nicht mehr im aktuellen Arbeitsverzeichnis.
Zudem werden Zugriffe auf diverse Verzeichnisse umgeleitet, wenn du kein Manifest benutzt. |
AW: LoadLibrary unter Windows 7
Vielleicht solltest Du Dir mit "RaiseLastOsError" den Fehlertext holen.
Zitat:
|
AW: LoadLibrary unter Windows 7
Eigentlich liegt die DLL bei mir direkt im Programmverzeichnis.
Auf die DLL greife ich mit LoadLibrary(PAnsiChar(ExtractFilePath(Application. ExeName)+'SCANNDYDll.dll')) zu, somit sollte also der richtige Pfad angegeben sein. Das mit dem SysWow64 versuche ich gleich mal. GetLastError liefert 126 zurück. Soweit ich gelesen habe ist 126 = Das angegebene Modul wurde nicht gefunden. |
AW: LoadLibrary unter Windows 7
Zitat:
Gruß, Chris |
AW: LoadLibrary unter Windows 7
Auch wenn ich sie ins SysWOW64 Verzeichnis lege ändert sich nichts.
Weder, wenn ich sie direkt aufrufen möchte, noch wenn ich gar keinen Pfad angebe... |
AW: LoadLibrary unter Windows 7
Setz doch mal nen Haltepunkt und schau dir an, was
Delphi-Quellcode:
als Ergebnis liefert.
PAnsiChar(ExtractFilePath(Application. ExeName)+'SCANNDYDll.dll')
|
AW: LoadLibrary unter Windows 7
Gibts dafür noch ne andere Möglichkeit?
Ich entwickle hier unter Windows XP und da funktioniert alles einwandfrei ;) Unter Win7 kann ich nur ausführen, nicht debuggen... |
AW: LoadLibrary unter Windows 7
Hallo,
Du kannst Dir ja den Pfad anzeigen (showMessage)lassen oder auch in eine Logdatei schreiben lasen, wenn LoadLibrary mit 0 endet. Grüße Klaus |
AW: LoadLibrary unter Windows 7
Zitat:
Kannst du mal folgendes Testen:
Delphi-Quellcode:
Gruß, Chris
DLLName := PAnsiChar(ExtractFilePath(Application. ExeName)+'SCANNDYDll.dll';
if FileExists(DLLName) then begin ShowMessage('Mich gibt es'); DLLHandle := LoadLibary(DLLName); end else begin ShowMessage('Datei gibt es nicht'); DLLHandle := 0; end; |
AW: LoadLibrary unter Windows 7
Was für ein Windows, 32-Bit oder 64-Bit? Was für eine Anwendung, 32-Bit oder 64-Bit? Was für eine DLL, 32-Bit oder 64-Bit? Und: "If the function fails, the return value is NULL. To get extended error information, call GetLastError."
Delphi-Quellcode:
Warum nicht gleich richtig:
DLLName := PAnsiChar(ExtractFilePath(Application. ExeName)+'SCANNDYDll.dll';
if FileExists(DLLName) then begin ShowMessage('Mich gibt es'); DLLHandle := LoadLibary(DLLName); end else begin ShowMessage('Datei gibt es nicht'); DLLHandle := 0; end;
Delphi-Quellcode:
Dann weiß man auch WARUM es nicht funktioniert hat. Sonst fangen wir ja wieder an zu raten. ;)
if LoadLibrary(...) = 0 then
begin ShowMessage(SysErrorMessage(GetLastError); end else begin ...; ...; end; |
AW: LoadLibrary unter Windows 7
Zitat:
Gruß, Chris |
AW: LoadLibrary unter Windows 7
Das ShowMessage zeigt mir den richtigen Pfad mit DLL an.
Also in dem Fall c:\Programme (x86)\XXX\Scandydll.dll |
AW: LoadLibrary unter Windows 7
64 Bit Windows,
32 Bit Anwendung 32 Bit DLL |
AW: LoadLibrary unter Windows 7
Ich habe eine Zeile über den LoadLibrary ein FileExists und das gibt mir true zurück.
Deswegen bin ich mir ja eigentlich sicher, dass der Pfad richtig sein sollte ;) |
AW: LoadLibrary unter Windows 7
Zitat:
Gruß, Chris |
AW: LoadLibrary unter Windows 7
Ich hätte da mal eine andere Idee. Ich weiß aber nicht, ob so etwas technisch möglich ist. Angenommenen die ScandyDll.dll will eine weitere DLL laden und findet diese nicht, würde dann die Fehlernummer 126 durchgereicht werden?
|
AW: LoadLibrary unter Windows 7
Zitat:
|
AW: LoadLibrary unter Windows 7
Natürlich wird "C:\Program Files (x86)\" angezeigt, du hast recht ;)
Passiert, wenn man schnell dahin schreibt... Ich habe jetzt mal genau deinen Code verwendet und ich bekomme auch die Meldung "Mich gibt es" und DLLHandle ist danach 0... |
AW: LoadLibrary unter Windows 7
Wo kommt die DLL her? Was sagt der Autor dazu? Gibt es eine Dokumentation?
|
AW: LoadLibrary unter Windows 7
Ja, Groß- und Kleinschreibung stimmen.
Ich habe zwischenzeitlich den Namen der DLL angepasst, dass da wirklich nichts schief geht. Kann es ein Problem bzgl. 32Bit DLL auf 64Bit System sein? |
AW: LoadLibrary unter Windows 7
Nicht wenn sie von einer 32-Bit Anwendung geladen wird.
|
AW: LoadLibrary unter Windows 7
Autor werde ich gleich mal anschreiben.
Ich wollte nur vorher abklären, dass es kein generelles, oder bekanntes Problem ist. Dokumentation ist nicht wirklich vorhanden. |
AW: LoadLibrary unter Windows 7
Zitat:
Zitat:
Zitat:
Zitat:
Gruß, Chris |
AW: LoadLibrary unter Windows 7
.. kann es sein das die DLL einen Fehler verursacht?
-> ![]() Grüße Klaus |
AW: LoadLibrary unter Windows 7
Für Dateinamen eigentlich nicht. Nur für die exportierten Funktionen. Aber es kann ja nicht schaden.
|
AW: LoadLibrary unter Windows 7
So, Problem gelöst, samso hatte eine sehr gute Idee.
Ich habe nochmal alle anderen Dateien im Programmverzeichnis überprüft und es hat natürlich noch eine Datei gefehlt, die durch die Scanndydll.dll geladen wird. Und wie so üblich musste ich die natürlich immer übersehen. Danke euch allen. |
AW: LoadLibrary unter Windows 7
Als allgemeiner Hinweis:
Statt in so einem Fall zu raten startet man einfach den Process Monitor und schaut nach welche Dateien versucht werden zu laden... Das dauert ein paar Minuten und man sieht was los ist, jedenfalls in diesem Fall. ;-) |
AW: LoadLibrary unter Windows 7
Oder man schmeißt schnell den Dependency Walker an. ;)
|
AW: LoadLibrary unter Windows 7
Ich entwickle unter Windows 7 Ultimate.Hatte das gleiche Problem.Habe mir einen neuen Nutznamen verpasst,dann
alles von dort aus neu installiert und schon hat es funktioniert.:-D Auch alle anderen Komponenten wie Fastreports,usw habe icht nicht als Admin installiert. Es kommt lediglich nach dem komplilieren die Meldung:"Wollen Sie die Ausführung des Programms zulassen"? Funktioniert alles fehlerfrei:lol: |
AW: LoadLibrary unter Windows 7
Bist du sicher, dass du im richtigem Thread gepostet hast? ich kann, da irgendwie keinen Zusammenhang erkennen.
|
AW: LoadLibrary unter Windows 7
gepennt:oops::oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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