有没有可能在64位C#应用程序中使用32位库?

3

我正在为一个运行在64位的应用程序编写插件,但我需要使用32位库中的对象(这个库只有32位版本)。有没有办法可以做到这一点?


3
我相信你可以在32位进程中托管32位库,然后使用进程间通信来传输数据。简短回答:这并不容易。 - user7116
2
你真的需要64位模式吗?这很罕见。简单的解决方法是将EXE项目的平台目标设置为x86。 - Hans Passant
2
@Hans 听起来像Rick没有控制主机应用程序,因为他正在编写一个插件。 - David Heffernan
2个回答

8

在.NET中非常容易实现。你只需保证进程中所有模块的位宽相同即可。

因此,你可以启动一个子32位进程,将所有32位DLL放在其中,并使用.NET的远程调用功能来调用其中的过程。或者正如在COM时代所说:使用进程外组件服务器(out-of-process component server)。

当你需要在32位和64位模块之间传递大量数据时,情况会变得更加复杂。你可以设置内存共享,但这比普通方法需要更多的工作。


7

这里的规则很简单,但可能不是你想听到的。在一个进程中的所有代码都必须具有相同的位数。如果你的托管进程是64位,则该进程中的所有代码也必须是64位。因此,如果需要运行32位代码,则必须将32位代码放在单独的进程中,并使用某种形式的IPC。


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