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

C# 在32位应用程序中使用64位DLL,c#,interop,32bit-64bit,C#,Interop,32bit 64bit,XCode的ARC重构迫使我的Cocoa库DLL为64位,我不知道我是否还能从x86 C#应用程序DllImport该DLL。这可能吗?这样做有什么后果吗?您不能在一个进程中混合使用32位和64位代码。因此,使用混合比特代码的唯一方法是有多个进程。您需要某种形式的IPC才能使其正常工作。你不能用DllImport做这件事,因为那是在进程中。问题不是真正的C#-这是操作系统中的托管进程。由于一个进程只能加载具有相同“位”的DLL,因此该进程要么是64位的,要么不能直接加载DLL。无论您使用何种语言

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

您不能在一个进程中混合使用32位和64位代码。因此,使用混合比特代码的唯一方法是有多个进程。您需要某种形式的IPC才能使其正常工作。你不能用DllImport做这件事,因为那是在进程中。

问题不是真正的C#-这是操作系统中的托管进程。由于一个进程只能加载具有相同“位”的DLL,因此该进程要么是64位的,要么不能直接加载DLL。无论您使用何种语言或框架

一种解决方案是将C#项目定位为使用“任意”cpu,或者专门将其指向X64


另一个解决方案是创建一个宿主进程,您可以使用IPC或类似的模型与之通信。

必要时,解决方案是在管道中调用EXE或类似的程序。这当然假设是64位windows。如果没有,就下注。

问得好……我有兴趣看看答案。在我脑海中,我认为你不能从64位转换到32位,但我可能错了。前向兼容性总是不确定,但这种情况早就知道了,我也很想看到答案。你可以做到,但是在运行时,你会得到一个BaDimaGebug。相反的问题有相同的答案——混合不支持使用Windows通信基金会(WCF)来实现这一点,但是需要学习MSDN文档来解决该做些什么!不过,一旦你使用了它,就不会太难了。@MatthewWatson这看起来像MacOS,带有单声道