从64位进程中调用32位代码

时间:2020-03-06 14:40:33  来源:igfitidea点击:

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

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

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

解决方案

我们需要将32位dll加载到单独的32位进程中,并让64位进程通过进程间通信与其进行通信。我认为没有其他方法可以将32位dll加载到64位进程中。

这里有一篇很好的文章:

从64位代码访问32位DLL

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