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

标签 .net dll linker shared-libraries

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

Referenced assemply 'path/to/dll' targets a different processor than the application.

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

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

64 位二进制文​​件怎么可能链接到 32 位共享库? 32 位 ABI 不会阻止这种情况吗?

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

如果您能提供任何其他信息来解释这一点,我们将不胜感激。

最佳答案

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

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

关于.net - 将 32 位库链接到 64 位 .NET 应用程序和内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885863/

相关文章:

c++ - 如何消除 LoadLibrary() 函数中变量类型不兼容的错误?

c++ - 在 ubuntu 上使用 libc++ 对 `__dynamic_cast' 的 undefined reference

C++ VS2010 在项目-> 属性中没有链接器

c++ - 未解析的外部符号显示为错误 while/force :unresolved is used

c# - 如何以编程方式添加用户帐户策略?

c# - Excel 获取范围

.net - 如何通过查看项目属性来判断应用程序是 Winforms 应用程序还是 WPF 应用程序

c# - 强制执行通用接口(interface)子类型

java - 运行DLL中声明的方法的代码

c++ - 卸载 DLL 后是否可以存储在 DLL 中创建的对象?