![]() |
DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Hallo,
ich habe ein kleines Problem und ich denke das ist nur irgendeine Einstellung im OS, komme aber nicht drauf. Folgender Code geht in meiner XE7 Umgebung (Win10 x64):
Delphi-Quellcode:
Der gleiche Code in meiner Delphi 10.1 Umgebung geht nicht.
var
myDllHandle: HMODULE; sFilePath: String; begin sFilePath := 'C:\WINDOWS\system32\myTest.dll'; if FileExists(sFilePath) then begin myDllHandle := SafeLoadLibrary(sFilePath); if myDllHandle <> 0 then begin ShowMessage('Laden erfolgreich'); end; end; FileExists liefert noch True aber in myDllHandle steht dann eine 0. Die Dll ist definitiv da und ist in beiden Umgebungen die gleiche. Diese liegt eigentlich im SysWow64 aber das wird dann ja umgeswitcht in System32. Also im System32 liegt direkt KEINE Dll von mir. Habt ihr spontan eine Idee? |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Delphi-Quellcode:
Aber wenn diese Datei sowieso im System-Verzeichnis liegt, würde ich niemals den Pfad mit angeben.
myDllHandle := {SafeLoadLibrary}LoadLibrary(sFilePath); // falls SafeLoadLibrary das GetLastError beeinflusst, weil dort nach dem LoadLibrary noch andere APIs aufgerufen werden
if myDllHandle <> 0 then ShowMessage('Laden erfolgreich') else RaiseLastOSError; |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Sind es die gleichen .dproj-Dateien? Startest du aus der IDE oder die .exe direkt aus dem Explorer?
Mir fällt nur ein dass man in der IDE ja bspw. die Umgebungsvariablen standardmäßig abgeändert sind... Ich kenne SafeLoadLibrary jetzt nicht, was ist denn wenn du ganz normal ![]()
Delphi-Quellcode:
zurückgibt?
RaiseLastOsError()
(Wurde schon erwähnt) |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Habe es so versucht:
Delphi-Quellcode:
GetLastError:
LoadLibrary(@sFilePath); //SafeLoadLibrary(sFilePath);
ERROR_MOD_NOT_FOUND 126 (0x7E) The specified module could not be found. Habe die gleiche Exe Datei jeweils getestet ohne Delphi IDE |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Eventuell eine doofe Frage, aber ist die DLL eine 64 Bit DLL und das Target in Delphi 10 auch?
Also passt die "bittness" zusammen? |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Auch ohne komplette Pfadangabe und mit LoadLibrary kommt ErrorCode 126
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Target ist immer 32 bit, immer die gleiche Exe (compiliere zwischendurch NICHT neu, sondern kopiere nur die Exe von A nach B).
DLL ist 32bit OS ist 64bit |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Die Suchmaschine meines Vertrauens zu "ERROR_MOD_NOT_FOUND" brachte das hier hervor:
![]() Hört sich eigentlich plausibel an: Deine DLL ist noch von anderen DLLs abhängig - Und die fehlen. |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Vielleicht ein Berechtigungsproblem? Was passiert, wenn die Exe als Admin ausgeführt wird? Wirklich explizit Rechtsklick -> Als Administrator ausführen.
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Zitat:
Im 64Bit Explorer also Datei unter C:\Windows\SysWOW64 ablegen! Das ist die komische Magie von Microsoft bei 64 Bit Systemen. |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
@bnreimer42: Siehe Post 1
Diese liegt eigentlich im SysWow64 aber das wird dann ja umgeswitcht in System32. Also im System32 liegt direkt KEINE Dll von mir. @bra: Brachte auch keine Besserung @Der schöne Günther: Weißt du, wie man rausbekommen kann, welche DLL noch fehlt? Die DLL ist leider nicht von mir, habe also kein QT Gucke grad bei deinem Link, ob ich mit dem DependencyWalker weiter komme |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Wenn ich es richtig in Erinnerung habe dann schaut sich der Dependency Walker nur die DLLs an welche statisch eingebunden werden. Das reicht hoffentlich aus.
Wenn die DLL in ihrer Initialisierung dynamisch irgendwelche DLLs lädt, dann bekommt man das wohl nur mit dem Debugger zur Laufzeit raus (denke ich). Windows-Guru Raymond Chen empfiehlt dafür ![]() |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Das Ereignisprotokoll der IDE sollte auch alle in den Prozess geladenenen DLLs auflisten.
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Muss man dann jede einzelne DLL im System suchen oder gibts eine Möglichkeit sich anzeigen zu lassen, welche nicht gefunden wurde?
Anscheind geht das mit dem Ereignisprotokoll nicht, da da nicht mal der Aufruf meiner DLL drinne auftaucht, die ich gerne Laden möchte. Also sehe ich auch nichts, was diese evtl. benötigt |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
In der IDE sieht man welche erfolgreich geladen wurden. Inwiefern einem das weiterhilft habe ich allerdings auch nicht verstanden :|
Wenn ich ein
Delphi-Quellcode:
mache steht in der IDE davon nichts...
LoadLibrary('thisFileDoesNotExist.dll');
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Zitat:
Zitat:
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Mist, in der XE7 Umgebung habe ich gar nicht geguckt. Sorry mein Fehler. Prüfe ich
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Also im Ereignisprotokoll werden jede Menge Dlls geladen.
Ich habe ab der Zeile, wo ich "meine" Dll lade, alle Dlls geprüft auf der 10.1 Umgebung sind diese alle im SysWow64 Ordner vorhanden. Hat leider nicht weitergeholfen |
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Übrigens, in meiner XE7 Umgebung geht es nur, wenn ich wie ursprünglich geschrieben "SafeLoadLibrary" nehme anstatt "LoadLibrary". Wenn ich nur "LoadLibrary" nehme, bekomme ich in der XE7 Umgebung auch Fehler 126.
|
AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Ich habs gefunden....
Da hatte doch noch eine DLL gefehlt: msvcr100.dll Habe jetzt Microsoft Visual C++ 2010 Redistributable Package installiert und schwupps, gehts. Danke für eure Mithilfe. PS: Bei mir geht aber nach wie vor der Aufruf von LoadLibrary in beiden Umgebungen nicht sondern nur der Aufruf von SafeLoadLibrary. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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