我有一个64位C ++进程,可以加载 AnyCPU C#DLL。 这个 AnyCPU C#DLL可以加载32位C ++ DLL,还是只能加载64位DLL?
谢谢! : - )
答案 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。