.net - 从 64 位进程调用 32 位代码

标签 .net migration x86 64-bit fortran

我有一个应用程序正在尝试从 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 位进程中。

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

Accessing 32-bit DLLs from 64-bit code

关于.net - 从 64 位进程调用 32 位代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128445/

相关文章:

c# - 有没有办法计算执行的 IL 指令数?

.net - (自动)将 CodePlex 项目迁移到 GitHub

macos - 为什么这段汇编代码会抛出段错误?

c# - 在后面的 UserControl 代码中获取依赖属性值

.net - 更改整个 Windows 窗体应用程序的当前区域性 .NET Compact Edition

c# - 从 c# 读取 excel,有什么新的吗?

html - 移动 wordpress 站点后对 css 文件的错误请求

.net - WinForm - WPF 集成;一片一片

linux - 在 linux : multiple definitions of 'main' 上使用 gas 的 x86 程序集

assembly - x86 指令集路线图