0

我正在与工作中的团队成员讨论将我们的软件套件从 32 位转换为 64 位的问题,并谈到在 64 位进程中使用 32 位 dll。他提到这是可能的,你可以做同样的事情来从 32 位进程使用 64 位库,但除了提到必须使用 inproc 服务器或更复杂的“装箱”之外,没有详细说明它技巧。

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

4

1 回答 1

0

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

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

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

于 2013-06-24T13:27:08.350 回答