2012-05-30 14 views
6

Windows ermöglicht es nicht, dass ein 32-Bit-Prozess eine 64-Bit-DLL lädt, daher versuche ich, Remoting zu verwenden, damit der 32-Bit-Prozess mit einem 64-Bit-Prozess interagieren kann.Wie kann ein 32-Bit-Prozess mit einem 64-Bit-Prozess in .NET kommunizieren?

Hier ist das Problem: während die beiden Anwendungen auf der gleichen Maschine befinden, ist einer 32 Bit und der andere 64 Bit, und sie müssen so sein: machen 32 Bit oder 64 Bit würde alle diese Anwendungen brechen sind auf gebaut.

Ich verwende die .NET System.Runtime.Remoting.RemotingConfiguration Klasse und rufe die Configure() -Methode auf und übergebe einen Verweis auf eine App.config Datei, die auf die MarshalByRefObject Klasse verweist, auf die ich per Remoting zugreifen werde.

Ich habe es zu arbeiten, aber nur so lange Client, Host, MarshalByRefObject Klasse sind entweder 32 Bit oder 64 Bit. Wenn ich sie vermische, wird das nicht funktionieren: Ich werde mit einer BadImageFormatException enden:

Konnte Datei oder Assembly 'MyRemotingObject' oder eine seiner Abhängigkeiten nicht laden. Es wurde versucht, ein Programm mit einem falschen Format zu laden.

Die Ausnahme verschwindet, sobald ich beide Anwendungen entweder 32 Bit oder 64 Bit, aber wieder muss einer von ihnen 32 Bit und der andere 64 Bit sein.

Kann mir jemand sagen, wie ich die Interprozesskommunikation zwischen einer 32-Bit-.NET-Anwendung und einer .64-Bit-.NET-Anwendung aktivieren kann?

+0

Remoting ist nicht dein Freund hier; Verwenden Sie etwas einfacheres - vielleicht ein einfacher Socket-Server. –

+0

Warum nicht alle 32bit oder alle 64bit? Was ist der Punkt der Vermischung dieser beiden? –

Antwort

8

Zufalls Vermutung: .NET Remoting muss die Montage in beide Prozesse laden halten, die Metadaten zu erhalten. Ihr Datenvertrag (um den WCF-Begriff zu verwenden) sollte sich in einer separaten Assembly befinden und als "AnyCPU" kompiliert werden, damit er in beide Prozesse geladen werden kann. Sie haben es explizit auf 32-Bit oder 64-Bit festgelegt.

+0

Sie haben Recht! Setzen Sie den Host auf 64 Bit, der Client auf 32 Bit und der Datenvertrag auf ALLE CPUs löst das Problem! DANKE! –

+2

Du solltest die Antwort dann akzeptieren ... ;-) –