从64位进程调用32位代码

我有一个应用程序,我们试图从32位迁移到64位。 它是.NET,使用x64标志进行编译。 但是,我们有大量编译为32位的FORTRAN 90编写的DLL。 FORTRAN DLL中的函数非常简单:将数据放入数据中; 没有任何forms的状态。 我们也没有花太多时间,总共有3%,但是它所执行的计算逻辑是非常宝贵的。

我可以以某种方式从64位代码调用32位DLL? MSDNbuild议我不能,期限。 我做了一些简单的黑客行为,并validation了这一点。 一切都会引发无效的入口点exception。 目前唯一可能的解决scheme是为所有32位DLL函数创buildCOM +包装器,并从64位进程调用COM。 这似乎相当头痛。 我们也可以在WoW模拟中运行这个过程,但是内存的上限不会增加,上限为1.6GB左右。

有没有其他的方式来从64位CLR过程调用32位DLL?

您需要将32位dll加载到一个单独的32位进程中,并让您的64位进程通过进程间通信与它进行通信。 我不认为有什么办法可以将一个32位的DLL加载到一个64位的过程,否则。

这里有一篇不错的文章:

从64位代码访问32位DLL

你需要把你的可执行进程写成32位进程(而不是任何CPU或者x64),这样他们就可以使用WoW32加载Vista了。 这将加载他们在32位模拟模式,你将不会有入口点的问题。 您可以将库存放在AnyCPU模式,但是您的可执行文件必须编译为x86。

John的答案是正确的,如果你不想重新编译你现有的DLL; 不过这也可能是您的select。

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