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

SSi*_*ilk 7 windows dll path 32bit-64bit

Windows应用程序通常是否能够区分两个具有相同名称的DLL,一个是32位,一个是64位,如果它们位于系统PATH变量的两个独立路径中?

特别是现在,我有FreeImage的32位和64位DLL,它们位于两个独立的文件夹中,free_image_path\dist32并且free_image_path\dist64我已经添加到系统PATH中.但是,使用它们构建的应用程序也找不到,我想知道这是因为有两个具有相同名称的DLL并且它们无法区分它们.

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

谢谢.

dth*_*rpe 8

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

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

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

  • 我很遗憾地说,但这是不真实的("它将无法加载DLL").这取决于你如何*使用DLL.例如,很可能使用x64 DLL作为x86进程的资源DLL,反之亦然.一旦涉及代码,您显然在所有其他方面都是正确的. (2认同)
  • 嗯,这是99%的真实.让我们为这个问题做出100%的评价,FreeImage是一个图书馆. (2认同)