繁体   English   中英

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

[英]AnyCPU C# DLL in 64bit process loads 32bit DLL

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

谢谢! :-)

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函数。

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

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

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

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

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

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

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

简而言之,组件被错误地标记为AnyCPU。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM