64位进程中的AnyCPU C#DLL加载32位DLL

时间:2011-04-26 09:42:27

标签: c# c++ 64-bit 32bit-64bit

我有一个64位C ++进程,可以加载 AnyCPU C#DLL。 这个 AnyCPU C#DLL可以加载32位C ++ DLL,还是只能加载64位DLL?

谢谢! : - )

4 个答案:

答案 0 :(得分:7)

AnyCPU DLL在调用进程的上下文中运行,根据您的问题,它是x64。如果此AnyCPU DLL加载另一个DLL,它也会在加载AnyCPU DLL的x64调用进程的上下文中运行。这是跨不同平台运行代码的问题。如果你想通过调用AnyCPU DLL的x64process运行32位DLL,那么你需要创建一个名为SURROGATE进程的东西 - 这基本上是一个可以运行和加载32位DLL的x86(32位)进程您想要从调用x64进程访问。运行此x86进程后,此x64进程可以使用进程间通信与x86进程(已加载x86 DLL)进行通信,并且可以实现从x64进程间接调用x86 DLL函数。

答案 1 :(得分:2)

您只能加载与进程具有相同位的dll。 Any CPU dll本身可以在64位和32位进程中加载​​,但这并不意味着可以将本机32位dll加载到64位进程中。

我知道的唯一解决方法是使用32位辅助进程加载32位dll,然后与该进程通信。

答案 2 :(得分:1)

不,您无法将32位DLL加载到64位进程中。

AnyCPU意味着C#DLL可以加载到32位或64位进程中,而不是它可以加载任何位数的DLL。

答案 3 :(得分:0)

无法在64位进程中加载​​32位DLL。

我在你的问题中发现了一个问题:你的AnyCPU程序集加载32位C ++ dll是不可能的,因为它使程序集特定于这个体系结构。

使其成为AnyCPU意味着它将动态加载特定于其运行的体系结构的DLL。这样它就可以在 Any CPU 上运行。

简而言之,程序集被错误地标记为AnyCPU。