一个32位进程如何在.NET中与一个64位进程通信?

9

Windows不允许32位进程加载64位dll,因此我正在尝试使用远程调用来实现32位进程与64位进程的交互。

问题在于:虽然这两个应用程序位于同一台计算机上,但其中一个是32位的,另一个是64位的,并且必须保持这种方式:使它们都是32位或64位会破坏这些应用程序所构建的一切。

我正在使用.NET的System.Runtime.Remoting.RemotingConfiguration类,并调用其Configure()方法,传递一个对App.config文件的引用,该文件引用了我将通过远程调用访问的MarshalByRefObject类。

我已经让它工作了,但只有在客户端、主机和MarshalByRefObject类都是32位或64位时才能正常工作。如果我混合它们,这将无法工作:我最终会得到一个BadImageFormatException

无法加载文件或程序集'MyRemotingObject'或其某个依赖项。尝试加载格式不正确的程序。

只要我让两个应用程序都是32位或64位,异常就会消失,但再次强调,其中一个必须是32位,另一个必须是64位。

有人能告诉我如何在32位.NET应用程序和64位.NET应用程序之间启用进程间通信吗?


远程调用在这里并不是你的朋友;使用更简单的东西——也许是一个基本的套接字服务器。 - Marc Gravell
2个回答

11

随机猜测:.NET远程调用需要将程序集加载到两个进程中以获取元数据。您的数据契约(使用WCF术语)应该在单独的程序集中,并且应编译为“AnyCPU”,以便可以加载到任何一个进程中。您已经明确设置为32位或64位。


你是对的!将主机设置为64位,客户端设置为32位,数据契约设置为ANY CPU可以解决问题!谢谢! - John Smith

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接