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

我有一个应用程序正在尝试从32位迁移到64位。它是使用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吗?


明月笑刀无情
浏览 364回答 3
3回答

慕运维8079593

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

犯罪嫌疑人X

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

忽然笑

如果您不想重新编译现有的dll,有的答案是正确的。但是,这也可能是您的选择。我们的团队目前正在将x86 FORTRAN代码迁移到x64,以增加内存上限。
打开App,查看更多内容
随时随地看视频慕课网APP