![]() |
32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Hallo :wink:
Ich habe mit Delphi XE also eine 32bit-Anwendung auf meinem 32bit-System geschrieben. Ich lese eine 32bit-DLL ein und alles ist gut. Nun soll die Anwendung auf einem Windows7Pro 64bit-System ausgeführt werden. Beim Laden meiner Anwendung (zu Beginn wird die DLL mit LoadLibrary geladen) sagt mir das System, daß es die DLL nicht findet. Nun habe ich recherchiert und mit
Delphi-Quellcode:
den Pfad angegeben, damit es sie auch ganz sicher findet - sie ist ja sogar im gleichen Ordner wie die .exe !
extractfilepath(application.exename)+DLLname
Gleiche Meldung: DLL nicht gefunden! :pale: Nun habe ich weiter geforscht, aber Google sucht mir da nicht richtig ("32bit dll in 64bit system loadlibrary delphi" - findet meist sowas wie '64bit-DLL in 32bit-App', oder für java...). Wenn es über LoadLibrary nicht gehen würde, habe ich mir gedacht, die DLL "einfach" in die .exe als Resscource einzubinden und im Speicher zu starten, dann entfällt das LoadLibrary - so ![]() Aber bevor ich dieses KnowHow mühsehlig erlerne und dafür Stunden invenstiere... - bestehen hierzu überhaupt Aussichten auf Erfolg, daß das auch gelingt? Oder sollte ich in einer anderen Richtung weitersuchen, da ich die DLL nicht verändern kann?! |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Wenn das der Fall ist dann wird unter einem 64Bit System eine 64Bit.dll (Treiber für das USB Gerät) geladen und nicht eine 32Bit. Das ist der Grund warum die DLL nicht gefunden wird. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Gut aufgepasst :thumb:
Der Hersteller hat auch Treiber mitgeliefert "win32at64bit", diese hab ich dann auch installiert; die DLL, die ich nutze, ist aus den Beispielen und gibt es in keiner anderen Version. Interessanterweise hat das Meldungsfenster jetzt keinen Inhalt mehr :| Mit welchen Problemen hätte ich zu rechnen, wenn ich den kompletten Quelltext auf einem 64bit-Delphi kompilieren wollte? Die 32bit-DLL könnte ich dann wohl trotzdem nicht laden, oder!? Edit: Warum greift das WOW64-System nicht bzw. wie kann man es motivieren? |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Eine 64Bit-Anwendung erfordert zwingend 64Bit-DLLs.
Kannst also aufhören, es zu versuchen. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Es gäbe die Möglichkeit mit einer zwischengeschalteten 32Bit Anwendung auch eine 64Bit Anwendung über IPC WM_COPYDATA 32Bit Dll's anzusprechen. Ob das mit Treiber Dll's möglich ist habe ich noch nicht probiert. Hingegen bei normalen DLL's (keine Treiber) ist das sehr wohl machbar. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Man sollte hier DLLs von Treiber und Interface auseinanderhalten. Die DLLs vom Treiber entsprechen natürlich immer der Architektur des Systems, sind also 32 bittig auf einem x86 und 64 bittig auf einem x64 (bis auf Ausnahmen wie Co-Installer).
Sofern aber weitere DLLs zum Zugriff mitgeliefert wurden bzw. vorhanden sind, wie es z.B. bei der Windows API (z.B. shell32.dll) der Fall ist, sehe ich kein Problem. Daher mein Tip: untersuche die DLL, um die es geht, genauer mit einem PE Analysetool, z.B. FileAlyzer o.ä. MfG Dalai |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Zitat:
In der x86at64bit-Version, die das Hersteller-Treibersetup im "C:\Program Files (x86)" installiert hat, steht der String
Delphi-Quellcode:
im Vergleich zu
6f1ea56521e5ead1af5152081ea42a971ddbb85c78cbf3.WD1011_64_NL_Newport
Delphi-Quellcode:
in der win32-Version, die ich bisher einwandfrei auf meinem 32bit-System genutzt habe.
6f1ea7e7635967b1d4fec0f13548d3b1f10f6484144339.WD1011_32_NL_Newport
Und soeben schrieb mir Zitat:
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
[EDIT] Achso, eine Sache noch: DLLs haben genau wie Programme (EXE) Abhängigkeiten. Die sollte man sich ebenfalls anschauen, ob die allesamt erfüllt sind. Sonst schlägt das Laden einer DLL ebenfalls fehl. Bei FileAlyzer findet man das auf der Registerkarte "PE Imports". [/EDIT] MfG Dalai |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Also Nochmal!
Zitat:
Du kannst über eine 32Bit Schnittstelle nicht mit einen 64Bit Treiber kommunizieren. Da hilft auch ein Austauschen nichts. Das Hardwaregerät wird ohne 64Bit Treiber nicht funktionieren. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Dieses kurzzeitige Umschalten kann man übrigens auch selbst machen: ![]() Ist allerdings nicht ganz trivial und sicherlich ziemlich hacky. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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