windows可以区分32位和64位DLL吗?

发布于 2024-11-14 11:50:28 字数 418 浏览 3 评论 0原文

如果 Windows 应用程序位于系统 PATH 变量中的两个独立路径中,那么 Windows 应用程序通常是否应该能够区分两个同名的 DLL(一个是 32 位,一个是 64 位)?

具体来说,现在,我有 FreeImage 的 32 位和 64 位 DLL,它们位于两个单独的文件夹中,free_image_path\dist32free_image_path\dist64,两者都是我已将其添加到系统路径中。但是,为使用它们而构建的应用程序也找不到,我想知道这是否是因为有两个同名的 DLL 并且它们无法区分它们。

我还尝试将 32 位和 64 位 DLL 分别放入 windows\system 和 windows\SySWoW64 文件夹中,这适用于 32 位应用程序,但不适用于 64 位应用程序。

谢谢。

Should Windows applications generally be able to distinguish between two DLLs with the same name, one being 32-bit and one being 64-bit, if they're in two separate paths in the system PATH variable?

Specifically right now, I have 32-bit and 64-bit DLLs for FreeImage, and they're in two separate folders, free_image_path\dist32 and free_image_path\dist64, both of which I've added to the system PATH. However, application built to use them can't find either and I'm wondering if this is because there's two DLLs with the same name and they can't distinguish them.

I also tried putting the 32-bit and 64-bit DLLs in the windows\system and windows\SySWoW64 folders respectively, and that worked for the 32-bit app but not the 64-bit.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山田美奈子 2024-11-21 11:50:28

Windows 可以判断给定的 DLL 是针对 32 位还是 64 位平台编译的,但这对于您描述的情况没有帮助。一旦在系统路径中找到符合 DLL 导入的文件名要求的 DLL,应用程序进程的 DLL 加载器就会停止查找。没有其他匹配代码 DLL 的条件。 (如评论中所述,非代码资源 DLL 是另一回事。我怀疑资源 DLL 不是由核心程序加载器加载的,而是由具有不同规则和目标的资源管理器加载的。)

如果路径中的第一个 DLL 是 32位并且您的应用程序是 32 位,则 DLL 加载将起作用。如果应用程序是 64 位,它将无法加载 DLL 并且进程将中止。

如果您希望两个 DLL 在系统路径上共存,则需要为它们指定唯一的文件名。

Windows can tell whether a given DLL is compiled for 32 bit or 64 bit platforms, but that won't help in the situation you describe. The DLL loader for your app process will stop looking as soon as it finds a DLL in the system path that fits the file name requirements for the DLL import. There are no other qualifications for matching code DLLs. (as noted in the comments, non-code resource DLLs are a different story. I suspect resource DLLs are not loaded by the core program loader but by a resource manager with different rules and objectives.)

If the first DLL in the path is 32 bit and your app is 32 bit, then the DLL load will work. If the app is 64 bit, it will fail to load the DLL and the process will abort.

If you want two DLLs to coexist on the system path, you need to give them unique file names.

扮仙女 2024-11-21 11:50:28

作为将 64 位 dll 放入 \windows\system32 并将 32 位 dll 放入 \windows\syswow64 的替代方法,我发现如果您将 32 位的放在 \Program Files (x86) 的子目录中,将 64 位的放在 \Program Files 的相应子目录中,这两个子目录都包含在 PATH 中。

As an alternative to putting the 64-bit dll in \windows\system32 and the 32-bit one in \windows\syswow64, I have found that it also works if you put the 32-bit one in a subdirectory of \Program Files (x86) and the 64-bit one in the corresponding subdirectory of \Program Files, with both of those subdirectories included in PATH.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文