![]() |
Kommunikation zwischen x32 und x64
Hallo,
ich habe eine fremde Anwendung die einen COM server zur Verfügung stellt. In meiner 64 Bit Anwendung kann ich darauf jedoch nicht zugreifen da ich als Fehlermeldung "Klasse nicht registriert" erhalte. Also würde ich mir eine "Zwischenanwendung" als DLL basteln in 32 Bit. Diese soll mit dem COM-Server sprechen und mir dann entsprechende Funktionen bereitstellen. Das Problem ist, das ich in meinem 64Bit Programm auch diese 32Bit DLL nicht laden kann. Ich würde jetzt ungern mit Textdateien o.ä. kommunizieren. Welche Möglichkeiten habe ich sonst noch um mit meinem 64Bit Programm mit meiner 32Bit exe/dll zu kommunizieren? Gruß, Andreas |
AW: Kommunikation zwischen x32 und x64
Zitat:
Alle Funktionen der 32 Bit.dll werden dann von dieser 32 Bit Exe über WM_COPYDATA an deiner 64 Bit Anwendung geschickt. Aber! Dazu müsste man über die API der jeweiligen 32 Bit DLL verfügen damit man weis was da abgeht. Habe das mit meinen 32 Bit Visualisierungs Plugins in Verbindung mit einer 64 Bit Anwendung so gemacht. Damit ich diese nicht alle neu schreiben musste. 64Bit Exe -> 32 Bit Exe -> 32Bit DLL back to 64Bit Exe over WM_COPYDATA |
AW: Kommunikation zwischen x32 und x64
Es kommt auch drauf an, wie der COM-Server arbeitet.
Oft ist das eine DLL, die im Zielprozess geladen wird und dort läuft, dann muss die Bittigkeit natürlich zusammenpassen, sonst geht es nicht. Aber als OutOfProcess-Server läuft er nicht in deinem Prozess und die COM-Schnittstelle baut die Verbindung auf ... hier ist es dann egal, wieviel Bit beide Teilnehmer haben. Tja, wie bereits gesagt wurde, und wenn es leider ein InProcess-Server ist, dann wirst du es eben selbst auslagen und die Verbindung via IPC aufbauen müssen. Eventuell kann man um die eigene EXE herum kommen, wenn man den DLL-Host vom Windows benutzen kann. (das sind zwei EXEn 32 und 64 Bit, in denen DLLs geladen und Code ausgeführt werden kann ... falls dir die dllhost.exe im Taskmanager schonmal aufgefallen ist) |
AW: Kommunikation zwischen x32 und x64
Eigentlich gibt es keinen Grund, der verhindert, daß eine 32Bit COM DLL von einer 64Bit Applikation genutzt werden könnte - dafür ist ja WOW64 schließlich da. Ist das COM Objekt ordnungsgemäß registriert?
Sherlock |
AW: Kommunikation zwischen x32 und x64
[QUOTE=venice2;1472070]
Zitat:
Zitat:
Den Schlüssel habe ich in HKCR\WOW6432Node\CLSID gefunden. ich hatte den Schlüssel mal nach HKCR\CLSID kopiert, aber da bekam ich als Fehlermeldung %1 wäre keine zulässige Win32 Anwendung. Übrigens hatte ich die DLL vom COM-Server über eine Typenbibliothek nach Delphi importiert und in ein Package gesteckt. Das dann installiert. Und hier war der "Installations-Button" aus dem Kontextmenü schon nicht verfügbar wenn ich im package auf x64 umgestellt hatte. |
AW: Kommunikation zwischen x32 und x64
Das hat nichts mit WoW zu tun.
In einem 64 Bit-Prozess können nur 64 Bit-DLLs geladen werden, und andersrum. Über WoW können im selben Windows unterschiedliche Prozesse nebeneinander laufen (nicht ineinander) OufOfProcees vs. InProcess (oder Remote, in anderem Windows, das geht auch) ![]() |
AW: Kommunikation zwischen x32 und x64
Zitat:
Das wird immer sehr leicht übersehen und hat wie du sagst nichts mit irgendwelchen Umleitungen WOW -> WOW64 zu tun. 64 Bit Prozess = 64 Bit Prozess da ist nix mit mischen das verträgt sich nicht egal ob Com\ActiveX DLL oder Standard DLL. |
AW: Kommunikation zwischen x32 und x64
Gemäß
![]() Sherlock |
AW: Kommunikation zwischen x32 und x64
Zitat:
Das ermöglichte mir innerhalb eine Case Verzweigung auf die verschiedenen Funktionen in der 32 Bit exe zu reagieren. case 0: 'Show' Case 1: 'tu was anderes' nur so als Anreiz. |
AW: Kommunikation zwischen x32 und x64
Zitat:
Du kannst aber eine 32Bit exe\32Bit COM DLL unter x64 Window starten dafür ist es gedacht. 16 Bit hingegen nicht mehr! Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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 by Thomas Breitkreuz