【问题标题】:How can a 32 bit process communicate with a 64 bit process in .NET?.NET 中 32 位进程如何与 64 位进程通信?
【发布时间】:2012-06-05 01:56:27
【问题描述】:

Windows 无法让 32 位进程加载 64 位 dll,因此我尝试使用远程处理以允许 32 位进程与 64 位进程交互。

问题是:虽然这两个应用程序位于同一台机器上,但一个是 32 位的,另一个是 64 位的,而且它们必须是这样的:同时使用 32 位或 64 位会破坏这些应用程序的一切建立在上面。

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

我让它工作了,但只要 Client、Host、MarshalByRefObject 类是 32 位或 64 位。如果我把它们混在一起,这将不起作用:我最终会得到一个BadImageFormatException

无法加载文件或程序集“MyRemotingObject”或其其中之一 依赖关系。试图加载一个不正确的程序 格式。

只要我将两个应用程序都设为 32 位或 64 位,异常就会消失,但同样,其中一个必须是 32 位,另一个必须是 64 位。

谁能告诉我如何启用 32 位 .NET 应用程序和 .64 位 .NET 应用程序之间的进程间通信?

【问题讨论】:

  • Remoting 在这里不是你的朋友;使用更简单的东西——也许是一个基本的套接字服务器。

标签: .net 64-bit ipc remoting 32-bit


【解决方案1】:

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

【讨论】:

  • 你是对的!将主机设置为 64 位,将客户端设置为 32 位,将数据合约设置为任何 CPU 即可解决问题!谢谢!
【解决方案2】:

您可以通过命名管道使用 WCF。

这里有一个简单的例子: http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2010-12-11
    相关资源
    最近更新 更多