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

问题描述:

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

谢谢! :-)

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

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

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

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

我知道的唯一解决方法是有一个32位帮助进程,加载您的32位DLL,然后与该进程进行通信。

+0

其他解决方法是让AnyCPU程序集加载对应于该体系结构的C++ DLL – CharlesB 2011-04-26 09:57:58

+0

如果您拥有64位版本的dll,那显然是最好的解决方案。 – CodesInChaos 2011-04-26 10:05:51

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

我在您的问题中看到一个问题:您的AnyCPU程序集不可能加载32位C++ dll,因为它使该程序集特定于此体系结构。

使之成为AnyCPU意味着它将动态加载特定于它所运行的体系结构的DLL。这种方式运行于任何CPU

总之,该程序集被错误地标记为AnyCPU。

+0

32位程序集也可以在任何CPU上运行。 – 2011-04-26 09:59:37