我有一个应用程序正在尝试从 32 位迁移到 64 位。它是 .NET,使用 x64 标志编译。然而,我们有大量用 FORTRAN 90 编写的 32 位编译的 DLL。 FORTRAN DLL 中的函数相当简单:将数据放入,将数据取出;没有任何状态。我们也不会花很多时间在那里,总共可能只有 3%,但它执行的计算逻辑是无价的。
我可以通过某种方式从 64 位代码调用 32 位 DLL 吗? MSDN 表明我不能,就这样。我已经做了一些简单的黑客攻击并验证了这一点。一切都会抛出无效的入口点异常。到目前为止,我发现的唯一可能的解决方案是为所有 32 位 DLL 函数创建 COM+ 包装器,并从 64 位进程调用 COM。这看起来是一件很头疼的事情。我们也可以在魔兽世界模拟中运行该进程,但内存上限不会增加,上限为 1.6GB 左右。
还有其他方法可以从 64 位 CLR 进程调用 32 位 DLL 吗?
最佳答案
您需要将 32 位 dll 加载到单独的 32 位进程中,并让 64 位进程通过进程间通信与其进行通信。我认为没有任何方法可以将 32 位 dll 加载到 64 位进程中。
这里有一篇非常好的文章:
关于.net - 从 64 位进程调用 32 位代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128445/