AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen x32 und x64

Ein Thema von MechMac666 · begonnen am 19. Aug 2020 · letzter Beitrag vom 19. Aug 2020
Antwort Antwort
Seite 1 von 2  1 2      
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#1

Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 09:42
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
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 10:33
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

Geändert von venice2 (19. Aug 2020 um 10:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 10:52
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Aug 2020 um 10:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 10:53
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#5

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:07
[QUOTE=venice2;1472070]
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.



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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:07
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:12
Zitat:
In einem 64 Bit-Prozess können nur 64 Bit-DLLs geladen werden, und andersrum.
Korrekt!

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.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#8

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:13
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#9

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:16
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.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Kommunikation zwischen x32 und x64

  Alt 19. Aug 2020, 11:18
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.

Geändert von venice2 (19. Aug 2020 um 11:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
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