将32位库链接到64位.NET应用程序和内存消耗

3 .net dll linker shared-libraries

我正在编译一个针对x86-64的.NET应用程序; 但是,该应用程序引用了一个32位的dll.可执行文件编译正常,但Visual Studio会发出警告:

引用的asseble'path/to/dll'针对的是与应用程序不同的处理器.

现在,我的理解是您不能简单地将64位可执行文件链接到32位共享库..NET(或Windows?)使用什么黑魔法来实现这一目标?

当针对x86和x86-64构建应用程序时,我注意到了相当大的内存占用差异.当动态加载32位dll并开始处理时,64位应用程序的内存占用量将大约增加60 MB(64位为250 MB,而32位为190 MB),而应用程序的内存占用量为32比特应用程序.但是,当dll中的某个代码路径被命中时,这种差异才会很大,不幸的是,我无法查看dll以查看内部.

如何将64位二进制文​​件链接到32位共享库?32位ABI不会阻止这种情况吗?

当应用程序编译为x86-64架构时,为什么内存占用量会有如此大的差异?

任何其他信息,以解释这一点将不胜感激.

bsn*_*eze 5

x86和x64无法加载到同一进程中.您确定该引用不是AnyCPU程序集,或者32位引用在GAC中没有64位或AnyCPU版本吗?

另请注意,在64位Windows上,System32中的DLL为64位.32位的是在SysWOW64中.