Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kommunikation zwischen x32 und x64 (https://www.delphipraxis.net/205264-kommunikation-zwischen-x32-und-x64.html)

MechMac666 19. Aug 2020 08:42

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

venice2 19. Aug 2020 09:33

AW: Kommunikation zwischen x32 und x64
 
Zitat:

Zitat von MechMac666 (Beitrag 1472065)
Hallo,
Welche Möglichkeiten habe ich sonst noch um mit meinem 64Bit Programm mit meiner 32Bit exe/dll zu kommunizieren?

Gruß, Andreas

Du könntest eine 32Bit Exe erstellen diese im Hintergrund starten.
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

himitsu 19. Aug 2020 09:52

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)

Sherlock 19. Aug 2020 09:53

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

MechMac666 19. Aug 2020 10:07

AW: Kommunikation zwischen x32 und x64
 
[QUOTE=venice2;1472070]
Zitat:

Zitat von MechMac666 (Beitrag 1472065)
Alle Funktionen der 32 Bit.dll werden dann von dieser 32 Bit Exe über WM_COPYDATA an deiner 64 Bit Anwendung geschickt.

Ok, das hört sich gut an. So werde ich es machen.



Zitat:

Zitat von Sherlock (Beitrag 1472074)
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

Es wurde über regsvr32 registriert.
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.

himitsu 19. Aug 2020 10:07

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)

http://docs.embarcadero.com/products...rvers_xml.html

venice2 19. Aug 2020 10:12

AW: Kommunikation zwischen x32 und x64
 
Zitat:

In einem 64 Bit-Prozess können nur 64 Bit-DLLs geladen werden, und andersrum.
Korrekt! :thumb::thumb:

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.

Sherlock 19. Aug 2020 10:13

AW: Kommunikation zwischen x32 und x64
 
Gemäß https://docs.microsoft.com/en-us/win...t-applications bietet WOW64 eben doch eine Interoperabilität zwischen 64Bit Exen und 32Bit COM. Und COM wurde im ersten Post genannt.

Sherlock

venice2 19. Aug 2020 10:16

AW: Kommunikation zwischen x32 und x64
 
Zitat:

Ok, das hört sich gut an. So werde ich es machen.
Du könntest das dann über Commandline verwirklichen (habe ich so gemacht)
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.

venice2 19. Aug 2020 10:18

AW: Kommunikation zwischen x32 und x64
 
Zitat:

Zitat von Sherlock (Beitrag 1472080)
Gemäß https://docs.microsoft.com/en-us/win...t-applications bietet WOW64 eben doch eine Interoperabilität zwischen 64Bit Exen und 32Bit COM. Und COM wurde im ersten Post genannt.

Sherlock

However, 32-bit processes cannot load 64-bit DLLs for execution, and 64-bit processes cannot load 32-bit DLLs for execution.
Du kannst aber eine 32Bit exe\32Bit COM DLL unter x64 Window starten dafür ist es gedacht.
16 Bit hingegen nicht mehr!

Zitat:

daß eine 32Bit COM DLL von einer 64Bit Applikation genutzt werden könnte - dafür ist ja WOW64 schließlich da.
Es ist dafür gedacht damit du 32Bit COM DLL in einem 64Bit (Windows) starten kannst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr.
Seite 1 von 2  1 2      

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