有关如何从64位进程访问32位库的说明有效,反之亦然

时间:2013-06-24 13:01:21

标签: .net memory 64-bit assemblies 32-bit

我正在与一位团队成员讨论如何将我们的软件套件从32位转换为64位,并且提出了在64位进程中使用32位dll的讨论。他提到这是可能的,你可以做同样的事情来使用32位进程中的64位库,但除了提到必须使用inproc服务器或更复杂的“拳击”之外,没有详细介绍它。技术。

我确实想知道如何做这个以供我自己参考,但我更感兴趣的是它实际上是如何工作的。如何访问32位和64位进程之间不可见的内存空间?如上所述,知道如何自己动手也不会有什么坏处,我通常使用C ++ / CLI或C#。

1 个答案:

答案 0 :(得分:0)

  

除了提到必须使用inproc服务器......

这在进程中是不可能的,64位进程无法加载和执行任何32位代码。如果您依赖于非托管代码,那么这只会是一个问题,纯.NET代码总是可以嵌入到所需的体系结构中。通过即时编译提供的非常好的东西。

使这种非托管代码工作的唯一方法是通过使用32位帮助程序进程来为代码提供兼容的主页。如果非托管代码作为COM服务器提供,您几乎可以免费获得此代码,您可以将其AppId配置为在代理进程中运行服务器。只需正确设置注册表项即可。如果没有,则创建自己的.NET主机应用程序,将Platform目标设置为x86,以便它将作为32位进程运行。让他们通过.NET进程互操作机制(如WCF,Remoting,命名管道或套接字)相互交谈。