从64位进程调用32位代码

时间:2008-09-24 17:15:52

标签: .net migration x86 64-bit fortran

我有一个应用程序,我们正试图从32位迁移到64位。它是.NET,使用x64标志编译。但是,我们有大量用FORTRAN编写的DLL编译为32位。 FORTRAN DLL中的函数非常简单:将数据放入,将数据拉出;没有任何状态。我们也不会花很多时间在那里,总共可能有3%,但它所执行的计算逻辑非常宝贵。

我可以以某种方式从64位代码调用32位DLL吗? MSDN建议我不能,期间。我做了一些简单的黑客攻击并验证了这一点。一切都会引发无效的入口点异常。到目前为止,我发现的唯一可能的解决方案是为所有32位DLL函数创建COM +包装器,并从64位进程调用COM。这看起来很头疼。我们也可以在WoW仿真中运行这个过程,但内存上限不会增加,大约1.6gb。

还有其他方法可以从64位CLR进程调用32位DLL吗?

3 个答案:

答案 0 :(得分:32)

您需要将32位dll加载到单独的32位进程中,并使64位进程通过进程间通信与其进行通信。我不认为有任何方法可以将32位dll加载到64位进程中。

这里有一篇非常好的文章:

Accessing 32-bit DLLs from 64-bit code

答案 1 :(得分:1)

您需要将可执行进程编写为32位进程(相对于任何CPU或x64),以便它们将加载WoW32 for Vista。这将在32位仿真模式下加载它们,您将不会遇到入口点问题。您可以在AnyCPU模式下保留库,但您的可执行文件必须编译为x86。

答案 2 :(得分:0)

如果您不想重新编译现有的dll,John的答案是正确的;然而,这也可能是你的选择。

我们的团队目前正在将x86 FORTRAN代码迁移到x64以增加内存上限。