为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2019-10-29 10:30:57
我有一个应用程序正在尝试从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吗?
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-10-29
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-10-29
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 788 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信