在32位应用程序中使用64位DLL

6

XCode的ARC重构强制我的Cocoa库DLL为64位,我不知道是否仍然可以从x86 C#应用程序中DllImport该DLL。这是可能的吗?这样做有什么后果吗?


好问题...我很感兴趣看到答案。从我的经验来看,我认为你不能从64位转换为32位,但我可能错了。 - Tim
向前兼容性总是有些棘手的问题,但这种情况已经足够早地被知晓,我也很想看到答案。 - Pieter Geerkens
你可以这样做,但是在运行时会出现BadImageException异常。 - harold
相反的问题https://dev59.com/n3VC5IYBdhLWcg3w-mVO有相同的答案-不支持混合。 - Michael Freidgeim
3个回答

8

一个进程中不能混杂32位和64位的代码。所以使用不同位数的代码的唯一方法是拥有多个进程。你需要某种形式的进程间通信使其工作。你不能通过DllImport实现此目的,因为这是在进程内进行的。


我使用Windows Communication Foundation (WCF)来完成这个任务 - 但是需要花一些时间研究MSDN文档才能弄清楚该怎么做!不过,一旦你掌握了它,就不会太难。 - Matthew Watson
1
@MatthewWatson 这看起来像是MacOS,带有Mono。 - David Heffernan

0
问题并不是C#本身,而是操作系统中的托管进程。由于一个进程只能加载具有相同“位数”的DLL文件,因此要么该进程为64位,要么你无法直接加载DLL文件。无论使用哪种语言或框架都是如此。
一个解决方法是将C#项目定位为使用“任何”CPU或具体指向X64。
另一种解决方案是创建一个托管进程,您可以使用IPC或类似模型进行通信。

0

必要时的解决方案是在管道或类似的环境中调用EXE。当然,这假定您使用的是64位Windows。如果不是,那就放弃吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接