我有一个我们正在试图迁移从32位到64位的应用程序。 这是.NET,使用64位标志编译。 但是,我们有大量写在FORTRAN 90的DLL编译为32位的。 在FORTRAN的DLL功能是相当简单:你把数据,你拉的数据输出; 没有任何形式的状态。 我们也不用花大量的时间,共也许3%,但它执行计算逻辑是非常宝贵的。
我能以某种方式从64位代码,32位的DLL? MSDN表明,我不能,期。 我做了一些简单的黑客和验证这一点。 一切都抛出一个无效的切入点例外。 唯一可能的解决方案到目前为止,我发现是为所有的32位的DLL函数创建COM +包装,并从64位进程调用COM。 这似乎是一个相当头痛。 我们也可以在魔兽世界仿真运行过程中,但随后的内存上限将不会增加,大约为1.6GB封盖。
是否有任何其他方式调用从64位CLR过程中的32位的DLL?
You'll need to have the 32-bit dll loaded into a separate 32-bit process, and have your 64 bit process communicate with it via interprocess communication. I don't think there is any way a 32-bit dll can be loaded into a 64 bit process otherwise.
There is a pretty good article here:
Accessing 32-bit DLLs from 64-bit code
你需要写你的可执行程序的32位进程(与任何CPU或x64),这样他们就会有WOW32加载为Vista。 这将加载他们在32位仿真模式,你会不会有切入点的问题。 你可以让你在AnyCPU模式库,但你的可执行文件必须被编译为86。
约翰的回答是正确的,如果你不想重新编译现有的DLL; 然而,这可能是一个选择为好。
我们的团队目前正在迁移我们的x86 Fortran代码到x64增加内存上限。