Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   LoadLibrary unter Windows 7 (https://www.delphipraxis.net/162019-loadlibrary-unter-windows-7-a.html)

trashcandesign 2. Aug 2011 11:04

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

p80286 2. Aug 2011 12:03

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)

jaenicke 2. Aug 2011 12:07

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.

samso 2. Aug 2011 12:28

AW: LoadLibrary unter Windows 7
 
Vielleicht solltest Du Dir mit "RaiseLastOsError" den Fehlertext holen.
Zitat:

If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Falls die DLL schlicht nicht gefunden wird, könnte es bei W7-64 daran liegen, dass Du sie manuell (mit einer 64-Bit-Anwendung) in das Verzeichnis "System32" kopiert hast und nicht in das Verzeichnis "SysWow64".

trashcandesign 2. Aug 2011 12:37

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.

ChrisE 2. Aug 2011 12:38

AW: LoadLibrary unter Windows 7
 
Zitat:

Zitat von jaenicke (Beitrag 1114642)
.... Aus Sicherheitsgründen sucht Windows standardmäßig nicht mehr im aktuellen Arbeitsverzeichnis......

ich dachte nur nicht mehr zuerst, aber schlussendlich immer noch? :gruebel:

Gruß, Chris

trashcandesign 2. Aug 2011 12:51

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...

ensaron 2. Aug 2011 12:52

AW: LoadLibrary unter Windows 7
 
Setz doch mal nen Haltepunkt und schau dir an, was

Delphi-Quellcode:
PAnsiChar(ExtractFilePath(Application. ExeName)+'SCANNDYDll.dll')
als Ergebnis liefert.

trashcandesign 2. Aug 2011 12:54

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...

Klaus01 2. Aug 2011 12:57

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

ChrisE 2. Aug 2011 12:58

AW: LoadLibrary unter Windows 7
 
Zitat:

Zitat von trashcandesign (Beitrag 1114660)
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...

Hmm, dass ist sehr merkwürdig. Es ist aber sicher kein schreibfehler`in dem DLL-Namen?
Kannst du mal folgendes Testen:
Delphi-Quellcode:
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;
Gruß, Chris

Luckie 2. Aug 2011 13:04

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:
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;
Warum nicht gleich richtig:
Delphi-Quellcode:
if LoadLibrary(...) = 0 then
begin
  ShowMessage(SysErrorMessage(GetLastError);
end
else
begin
  ...;
  ...;
end;
Dann weiß man auch WARUM es nicht funktioniert hat. Sonst fangen wir ja wieder an zu raten. ;)

ChrisE 2. Aug 2011 13:07

AW: LoadLibrary unter Windows 7
 
Zitat:

Zitat von Luckie (Beitrag 1114675)
Warum nicht gleich richtig:
Delphi-Quellcode:
if LoadLibrary(...) = 0 then
begin
  ShowMessage(SysErrorMessage(GetLastError);
end
else
begin
  ...;
  ...;
end;
Dann weiß man auch WARUM es nicht funktioniert hat. Sonst fangen wir ja wieder an zu raten. ;)

Weil wir diese aussage bereits hatten. GetLastError nach LoadLibrary liefert bereits 126 als Fehler zurück. Die Frage war wieso, den der TE versichert, dass die DLL da ist :-) - dachte ich ;-)

Gruß, Chris

trashcandesign 2. Aug 2011 13:09

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

trashcandesign 2. Aug 2011 13:11

AW: LoadLibrary unter Windows 7
 
64 Bit Windows,
32 Bit Anwendung
32 Bit DLL

trashcandesign 2. Aug 2011 13:12

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 ;)

ChrisE 2. Aug 2011 13:17

AW: LoadLibrary unter Windows 7
 
Zitat:

Zitat von trashcandesign (Beitrag 1114677)
c:\Programme (x86)\XXX\Scandydll.dll

Diesen Pfad gibt es nicht. Bist du dir siche, dass er so angezeigt wird? Und nicht als Program Files (x86)
Gruß, Chris

samso 2. Aug 2011 13:22

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?

Luckie 2. Aug 2011 13:22

AW: LoadLibrary unter Windows 7
 
Zitat:

C:\Dokumente und Einstellungen\Michael>net helpmsg 126

Das angegebene Modul wurde nicht gefunden.
Also wird da doch irgendwas nicht gefunden. Stimmt Groß- und Kleinschreibung vom DLL Namen?

trashcandesign 2. Aug 2011 13:24

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...

Luckie 2. Aug 2011 13:25

AW: LoadLibrary unter Windows 7
 
Wo kommt die DLL her? Was sagt der Autor dazu? Gibt es eine Dokumentation?

trashcandesign 2. Aug 2011 13:25

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?

Luckie 2. Aug 2011 13:27

AW: LoadLibrary unter Windows 7
 
Nicht wenn sie von einer 32-Bit Anwendung geladen wird.

trashcandesign 2. Aug 2011 13:27

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.

ChrisE 2. Aug 2011 13:28

AW: LoadLibrary unter Windows 7
 
Zitat:

Zitat von Luckie (Beitrag 1114687)
Also wird da doch irgendwas nicht gefunden. Stimmt Groß- und Kleinschreibung vom DLL Namen?

Wie jetzt? siehe die ganzen anderen Posts:
Zitat:

Zitat von trashcandesign (Beitrag 1114677)
GetLastError liefert 126 zurück.
Soweit ich gelesen habe ist 126 = Das angegebene Modul wurde nicht gefunden.

und
Zitat:

Zitat von ChrisE (Beitrag 1114676)
Weil wir diese Aussage bereits hatten. GetLastError nach LoadLibrary liefert bereits 126 als Fehler zurück. Die Frage war wieso, den der TE versichert, dass die DLL da ist :-) - dachte ich ;-)

und
Zitat:

Zitat von trashcandesign (Beitrag 1114680)
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 ;)

und auserdem ist doch Groß- Kleinschreibung unter einem Windows(datei)system nicht wichtig - dachte ich :gruebel:

Gruß, Chris

Klaus01 2. Aug 2011 13:30

AW: LoadLibrary unter Windows 7
 
.. kann es sein das die DLL einen Fehler verursacht?
-> http://entwickler-forum.de/showthread.php?t=20055

Grüße
Klaus

Luckie 2. Aug 2011 13:31

AW: LoadLibrary unter Windows 7
 
Für Dateinamen eigentlich nicht. Nur für die exportierten Funktionen. Aber es kann ja nicht schaden.

trashcandesign 2. Aug 2011 13:39

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.

jaenicke 2. Aug 2011 19:10

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. ;-)

Luckie 2. Aug 2011 19:24

AW: LoadLibrary unter Windows 7
 
Oder man schmeißt schnell den Dependency Walker an. ;)

blondervolker 3. Aug 2011 05:18

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:

Luckie 3. Aug 2011 06:22

AW: LoadLibrary unter Windows 7
 
Bist du sicher, dass du im richtigem Thread gepostet hast? ich kann, da irgendwie keinen Zusammenhang erkennen.

blondervolker 3. Aug 2011 08:32

AW: LoadLibrary unter Windows 7
 
gepennt:oops::oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 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