我正在为一个运行在64位的应用程序编写插件,但我需要使用32位库中的对象(这个库只有32位版本)。有没有办法可以做到这一点?
我正在为一个运行在64位的应用程序编写插件,但我需要使用32位库中的对象(这个库只有32位版本)。有没有办法可以做到这一点?
在.NET中非常容易实现。你只需保证进程中所有模块的位宽相同即可。
因此,你可以启动一个子32位进程,将所有32位DLL放在其中,并使用.NET的远程调用功能来调用其中的过程。或者正如在COM时代所说:使用进程外组件服务器(out-of-process component server)。
当你需要在32位和64位模块之间传递大量数据时,情况会变得更加复杂。你可以设置内存共享,但这比普通方法需要更多的工作。
这里的规则很简单,但可能不是你想听到的。在一个进程中的所有代码都必须具有相同的位数。如果你的托管进程是64位,则该进程中的所有代码也必须是64位。因此,如果需要运行32位代码,则必须将32位代码放在单独的进程中,并使用某种形式的IPC。