![]() |
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. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
PS: Man beachte vor allem die äußerst sinnvolle Benennung der Verzeichnisse unter Windows 64 Bit. Was MS da geraucht hat, möchte ich mal wissen. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Irgendwie wird hier was missverstanden.
Es geht hier um ein USB Gerät die Treiber sind nun mal aufgrund des Treibermodels von Windows zwingend auf 64Bit ausgelegt. Da kann man tricksen wie man will. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Zitat:
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Das System ist 64bit. Den Treiber gibt es in 64Bit und in "x32onx64". Die Schnittstellen-DLL hat 32bit. Es gibt auch eine mit 64bit, wie ich jetzt analysiert habe. Beide jedoch sagen, wenn sie von meinem 32bit-Programm geladen werden sollen, daß die DLL nicht gefunden wird. Zacherl macht mir Hoffungen :o |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
![]() ![]() MfG Dalai |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Die einfachste Variante wurde noch nicht genannt:
Nimm einfach den ![]() Wenn dort weitere DLLs versucht werden zu laden oder ähnliches, wirst du das dort sehen. Und wenn die DLL an der falschen Stelle gesucht wird, siehst du das auch. Das ist viel einfacher als die DLLs zu analysieren und feste Abhängigkeiten zu suchen. Eine Möglichkeit: Irgendwo liegt eine 64-Bit Version der Datei im Pfad. Ich weiß nicht, ob LoadLibrary dann weiter nach passenden Varianten sucht. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Mit Zugriffsadressen hat das ja nichts zu tun und dass sich das Pseudo-Segment ändert, ist auch höchst unwahrscheinlich. Dennoch hast du natürlich recht, dass es ein Hack ist und ab Win8.1 V3 funktioniert das Prinzip sowieso nicht mehr ohne Weiteres, da eine neue Anti-Exploit Technologie als Seiteneffekt auch das Heaven Gate unbrauchbar macht.
Für den Threadersteller ist das Ganze wohl sowieso unerheblich, da er ja eine 32-Bit DLL besitzt. Vermutlich benötigt diese DLL lediglich eine bestimmte Version der C-Runtimes, weshalb er den File-not-found Error bekommt. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Hm..
die Beispiele vom Hersteller funktionieren auf 64bit auch nicht richtig... möglicherweise ein allgemeines Problem. Mit dem FileAnalyzer erkenne ich jetzt nichts, was mir weiterhilft, aber interessant ist er allemal :wink: Mit den anderen Tools will ich mich noch beschäftigen. Wahrscheinlich wäre es das Beste, wenn ich mein Tool auf 64bit compilieren würde, dann läut es ohne wow64-Emulation und hat zu den richtigen DLLs Zugriff, oder? Mit Delphi XE scheine ich aber keine 64-Bit Apps generieren zu können, oder habe ich was übersehen? |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
64 Bit geht erst ab XE2.
Mit dem Process Monitor solltest du aber wie gesagt schnell weiterkommen. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Ich hab mir jetzt das Trial von Delphi 10.1 installiert und das Tool mit 64bit compiliert.
:coder2: Jetzt meint das Ding beim Laden der DLL: "%1 ist keine zulässige win32-Anwendung".:pale: Häää? :wall:-schnauze voll-:kotz: Ich hab jetzt ein seriell-auf-USB-Adapter an das Messgerät gesteckt, Treiber für diesen COM-Port-Adapter installiert, mit TComPort-Komponente Verbindung gelegt... - läuft! Danke für eurer Mitdenken :thumb: |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Aber wenn es jetzt läuft, ist ja gut. :) |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Eigentlich wollte ich nur antworten um zu erklären, daß man mit
![]() ![]() Aber dann sah ich so seltsame Behauptungen, denen ich noch entgegentreten will, da sie unwahr und falsch sind. Aber ich sehe auch, daß Zacherl das auch schon vollkommen richtig angesprochen hat. Danke übrigens für den interessanten Link, Zacherl. Zitat:
Zitat:
Zitat:
Das kann man sich auch ganz einfach veranschaulichen. Aufgrund der Architektur von Windows sind geladene Treiber gleichberechtigt mit dem Kernel. Kann ein 32-bittiges UM-Programm mit dem Kernel kommunizieren? Klar. Also gibt es keinen Grund warum das nicht auch für einen (KM-)Treiber gelten sollte. Zitat:
[1] Der Austausch von Zeigern verbietet sich natürlich, ist aber ohne ![]() ![]() |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Ich habe eine 64Bit DLL geschrieben bzw. für ein 64Bit Betriebssystem verfügbar gemacht (Die gab es vorher nur in 32Bit) Diese integriert sich in den Eigenschaften Dialog von *.mp3 Dateien im System 64Bit. Wenn das so klappt wie du sagst warum werden dann diese Eigenschaften nicht mehr erkannt wenn ich versuche eine Datei mit einer 32Bit Anwendung zu öffnen bzw. davon die Eigenschaften anzeigen zu lassen ? Weder werden die Icons noch die Eigenschaften der Datei im *.mp3 (Eigenschaften Dialog) angezeigt. Der Grund ist einfach eine Kommunikation findet nicht statt weil ich versuche mit einer 32Bit Anwendung eine 64Bit DLL zu laden. Siehe Anhang.. Das sagt alles. Ich habe dir also einen Sichtbaren beweis erbracht das es nicht geht.. Nebenbei! Und ja ich registriere diese Datei selbst mit meiner 32Bit Anwendung so das diese DLL dem System zur verfügung steht. Sie funktioniert aber nicht mit einer 32Bit Anwendung. Unabhängig davon ob ich sie ansprechen\registrieren kann oder nicht! Zitat:
Beweise mir das Gegenteil dann reden wir weiter. :) Ja ich kann sie laden/registrieren usw.. das ist aber nicht gleichzusetzen das sie auch funktioniert mit einer 32Bit Anwendung. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Kann zum Thema selbst nicht wirklich was beitragen, aber mich würd interessieren was am Ende rauskommt :) |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Diese DLL wird beim Windows Explorer registriert und da der in Windows 64 auch 64 Bit ist, kann er auch nur Eplorer-Plugins laden, welche ebenfalls 64 Bit sind,
bzw. in Windows 32 nur 32 Bit-DLLs. Das hat aber nichts mit Treibern oder Ressourcen-DLLs zu tun. Das Einzige, wo sich solche DLLs in der Bittigkeit unterscheiden dürfen ist bei solchen Out-Of-Process COM Servern, wo die DLL nicht im eigenen Prozess geladen wird, sondern in einem externen DLLHost ... da nimmt die COM-Schnittstelle dann die Verbindung/Datenkonvertierung/-übertragung vor. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Mich auch aber es ist doch ersichtlich Oder? Das laden einer Library von einer 32Bit Anwendung ist nicht gleichzusetzen mit der Funktion ob diese DLL dann mit 32Bit Anwendung kommunizieren kann. Das habe ich wohl ausreichend dokumentiert das es NICHT geht. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Ich registriere sie selbst.. mit meiner 32Bit Anwendung. Würde ich es nicht tun könntest du den Tab in den Eigenschaften Dialog gar nicht erst sehen. Ich beziehe mich darauf. Zitat:
Noch deutlicher als mit Bildern kann man es nicht widergeben. Wenn das jemand nicht sieht braucht er eine Brille. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Grüße Dalai |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Fakt ist das sie mit einer 32Bit Anwendung wenn als 64Bit ausgelegt nicht geladen werden kann. Darum geht es. Das ist nun mal Fakt. Seine Behauptung war es geht! Und das habe ich widerlegt. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Deine DLL spicht aber nicht mit 'nem Treiber, sonder mit dem Windows-Explorer und dafür muß sie in dessen Prozessraum geladen werden, was im Windows 64 nur 64 Bit-DLLs können.
Deine DLL könnte aber dennoch mit einem 32 Bit-Treiber reden, auch vom 64 Bit-Windows-Explorer aus. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Das ist der Grund warum es auch nicht geht. Aber er sagte doch es geht. Dem habe ich widersprochen. Treiber hin oder her.. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Zitat:
Zitat:
Die üblichen Schnittstellen über die du aus dem Win32-Subsystem mit einem (KM-)Treiber kommunizierst sind DeviceIoControl, ReadFile, WriteFile (und natürlich CreateFile und CloseFile). Sind die in WOW64 verfügbar? Ja? Gut, dann kannste auch kommunizieren. Ich schreib dir jetzt keinen extra (KM-)Treiber, keinen Bock drauf. Aber da ich selbst über lange Jahre genau diesen Anwendungsfall gewartet habe und dies bis heute tue (32-bittige Anwendung/DLL kommuniziert mit 64-bittigem Treiber auf 64-bittigem Windows), bin ich mir da auch sehr sicher ;) Zitat:
Zitat:
Zitat:
Zitat:
Wir redeten doch von einem Treiber, ja? Die meisten Treiber, gerade für Hardware, existieren im Kernelmodus (KM), richtig? Wie kommunizierst du mit dem Kernelmodus? Üblicherweise paketbasiert. Die o.g. Funktionen sind ein gutes Beispiel. Übrigens sieht man hier die Verwandtschaft (im Geiste) zu Unix™. Dort benutzt man auch Funktionen um "Dateien" zu öffnen, lesen und schreiben um auf Geräte unter /dev zuzugreifen. Und auch DeviceIoControl findet seine Entsprechung in der Funktion ioctl. Zitat:
Zitat:
Wenn du eine DLL lädst um Funktionen drin aufzurufen, befindest du dich im gleichen Adreßraum (wir ignorieren weiterhin den Artikel den Zacherl verlinkt hat). Wenn du eine 32-bit DLL (sei es kernel32.dll oder deine eigene) auf einem 64-bit Windows in eine 32-bit Anwendung lädst, dann kannst du die Funktionen und Daten in der DLL nur erreichen weil sie im gleichen Adreßraum sind. Das ist eine sehr direkte Geschichte und erfordert wenig Phantasie oder Wissen. Einfach Auf CPU-Ebene call und jmp usw. um zum Ziel zu gelangen. Ich versuch mal zu erklären was abgeht ohne zu tief in die Materie einzudringen. Dafür muß ich etwas vereinfachen. Für eine grobe Erklärung kannste dir eine aktuelle Ausgabe von "Windows Internals" zur Hand nehmen. Für Details zusätzlich einen Debugger, die WDK-Dokumentation und einen Disassembler. Alternativ bietet sich auch an in die Quellen von ReactOS zu schauen, welches Windows nachzubilden versucht. Wenn du eine Anforderung stellst, die in den Kernelmodus geht, bspw. eine Datei liest, oder eben ein Hardwaregerät anspricht, wird ein sogenannter IRP (I/O Request Packet) an das CDO (Control Device Object) oder PDO (Physical Device Object) eines Treibers geschickt [1]. Um eine Datei zu öffnen wäre das bspw. IRP_MJ_CREATE, weshalb man halt CreateFile als extra Funktion hat. Wenn du dir WinObj von Sysinternals zur Hand nimmst und unter \GLOBAL?? guckst, siehste da bspw. symbolische Links zu einer Volume-Instanz. Der I/O Manager sieht nun bspw. einen Pfad wie \??\C:\boot.ini, welchen kernel32.dll bereits aus der Dos/Win32-Form in die native Form überführt hat. Für diese Erklärung nimm einfach an, daß \GLOBAL?? == \??. Der I/O Manager geht nun den Pfad ab und sieht daß \GLOBAL?? ein Gerät (Device) oder einen Symlink namens C: enthält ... und löst den Namen mithilfe des Object Managers auf und gelangt bspw. zu \Device\Harddisk\Volume2. Der Pfad wird also zu \Device\Harddisk\Volume2\boot.ini. Nun weiß der I/O Manager aber, daß \Device\Harddisk\Volume2 ein Gerät ist und weiß welcher Treiber (üblicherweise der Festplattentreiber und Dateisystemtreiber) dafür verantwortlich ist (es handelt sich um einen Gerätestapel ... so filtert übrigens auch ein AV-Treiber Dateizugriffe). Also wendet er sich vertrauensvoll an dieses Gerät (\Device\Harddisk\Volume2) und übergibt dem zuständigen Treiber den restlichen Pfad (\boot.ini). Wenn ein Festplattentreiber involviert ist, reicht er es an das Dateisystem weiter (wenn du aber bspw. den Bootsektor ausliest, erledigt das der Festplattentreiber normalerweise). Der Dateisystemtreiber weiß dann damit was anzufangen (oder auch nicht, wenn die Datei nicht existiert) und extrahiert die Informationen aus dem IRP und reagiert entsprechend. Nach diversen Sicherheitschecks (schließlich kam die Anforderung ja in einem Benutzer- und Prozeßkontext), mag das Öffnen erfolgreich sein. In diesem Fall bekommt der UM ein Handle zurück. Wenn nun ReadFile oder WriteFile mit diesem Handle benutzt wird, wird ein IRP mit IRP_MJ_READ oder IRP_MJ_WRITE in den Kernelmodus übertragen und dort entsprechend weiterverarbeitet. Wenn man DeviceIoControl benutzt, ist es IRP_MJ_DEVICE_CONTROL und ein vordefinierter IOCTL (I/O Control Code), den du bspw. WinIoctl.h entnehmen kannst für diverse in Windows eingebaute Treiber. Das Handle wiederum wird intern in einen Zeiger auf ein FILE_OBJECT umgewandelt, wenn der Dateisystemtreiber (oder Dateisystemfiltertreiber) damit zu tun haben. Diese Objekte sind in der Tat Objekte im OOP-Sinn, auch wenn sie das nicht im Delphi- oder C++-Sinn sind. Sie haben Funktionen (öffnen, schließen usw.) und Daten. Der Object Manager ist verantwortlich dafür. Einen Überblick über die Objekttypen erhält man in \ObjectTypes, denn dort existieren die "Klassen" als Instanzen des Objekttyps "Type". So, durch diese paketbasierte Kommunikation kann nun ein 32-bit Prozeß (oder eine darin geladene 32-bittige DLL) auf einem 64-bittigen Windows mit einem 64-bittigen (KM-)Treiber kommunizieren. Q.E.D. [1] Ein AV-Treiber hat bspw. ein CDO um eben gesteuert werden zu können (Scanner aktivieren, deaktivieren oder bspw. Ausnahmen für Pfade konfigurieren oder Einstellungen am Scanner vornehmen, bspw. Archive scannen ja/nein). Kann aber auch andere Device Objects erzeugen und damit anderes machen. Es gibt nicht nur CDOs und PDOs. Treiber die nur Software ansprechen nennt man Virtual Device Drivers (VDD), im Gegensatz zu jenen die eine Schnittstelle zu einem Hardwaregerät herstellen. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
![]() |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Zitat:
Zumindest sind deine Beiträge inspirierend. Zitat:
Aber letztendlich kann man es so hinstellen wie man es gerne hätte ;) Da kann ich dir leider nicht widersprechen. LOL Es gibt für mich nur eins <> als funktioniert. gruss |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Aus gegebenem Anlass einen "uralten" Fred mal wieder nach oben gepusht !
Ehrlich gesagt: Zu meinem Prob bin nach Studium des Fred's hier nicht schlauer geworden. Problem hier: - 64Bit Win Anwendung - 32Bit DLL die ich verwenden möchte ... muss, weil es keine 64er Version zu geben scheint. Bisher mit DLLHandle := LoadLibrary(PChar(DateiName)); hat ja alles super funktioniert ... Unter x64 funzt das laden ja auch mit DLLHandle := LoadLibraryExA(PAnsiChar(DateiName), 0, $40); Allerdings endet GetProcAddress(DLLHandle, 'IrgendeineFunktion'); dann immer mit NIL - d.h. kein Zugriff. Die für mich unbeantworte / ungeklärte Frage: ... geht das nun grundsätzlich nicht, oder ... welche "Klimmzüge/Special Hacks" muss man da machen, damit das (eventuell irgendwie) geht ? Nachtrag: Es geht hier speziell um den Fehler: 0x8007001F NEIN ... nicht das was Google & Co. zum Theme "Windows-Update" anbieten. Hier geht es um DirectShow - im speziellen zu IKsPropertySet. Lesen der jeweiligen Props mit '.GET' funktioniertr ohne Probleme, aber schreiben mit '.SET' macht Sorgen ... -> ERROR: 0x8007001F Ich finde da im WWW zahlreiche Links, aber nichts was zum Problem passt. |
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Es gab Mal eine Lösung eines Schweizers mit der könnte man 64 bit DLLs in 32 bit Programmen nutzen. War ein kleiner in Loader mit dem man mittels Memory Mapped File kommuniziert hatte und der die DLL Aufrufe dann ausgeführt hat. Gab glaube ich auch eine andersherum Lösung. War damals in Code Central gewesen.
|
AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
In dem 64 Bit Prozess wurden sie bestimmt nicht genutzt,
aber man kann DLLs in einem 32 Bit-Prozess hosten und über eine Bridge damit reden. Für sowas ist z.B. die dllhost.exe im Windows, jeweils als 32- und 64-Bit-Variante. ![]() Dafür gab es auch was im ![]() [add] ![]() Es lässt sich die DLL zwar im anderem System laden, aber alle Zeiger und der Programmcode darin passen nicht, also kann natürlich auch keine Prozedur aufgeführt werden, selbst wenn GetProcAddress etwas geliefert hätte. Also entweder man lässt den Code in 32 Bit laufen oder man braucht z.B. einen Emulator, welcher den Inhalt der Datei auf 64 Bit übersetzt. ![]() Bridges zwischen System nutzt Delphi an mehreren Stellen. Delphi zu Java Win32 zu UWP (z.B. vieles bezüglich BT oder rechts die Benachrichtigungen ist/waren nicht im Win32). ![]() Und ja, Win64 nutzt die Win32-API (die Komponenten/Befehle/DLLs, welche genutzt werden, entsprechen der gleichen API) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:11 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