2

我的代码使用 LoadLibraryA("someDLL.dll"); 它开始搜索文件 someDLL.dll 的路径是什么?还有另一个问题:LoadLibraryA 函数是否区分大小写?我的意思是如果我有 SomeDLL.dll 它不会加载它?

4

2 回答 2

4

MSDN 库文章Dynamic-Link Library Search Order指定了启用SafeDllSearchMode时桌面应用程序的搜索顺序,这是从 Windows XP SP2 开始的默认设置:

  1. 加载应用程序的目录。
  2. 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
  3. 16 位系统目录。没有函数获取这个目录的路径,但是被搜索了。
  4. Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
  5. 当前目录。
  6. PATH 环境变量中列出的目录。请注意,这不包括 App Paths 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 App Paths 键。
于 2012-12-25T15:32:49.003 回答
2

LoadlLibrary文章在备注中指定搜索顺序:

如果 lpFileName 不包含路径并且有多个加载的模块具有相同的基本名称和扩展名,则该函数返回第一个加载的模块的句柄。

如果在 lpFileName 参数中未指定文件扩展名,则附加默认库扩展名 .dll。但是,文件名字符串可以包含一个尾随点字符 (.),以指示模块名称没有扩展名。当未指定路径时,该函数搜索其基本名称与要加载的模块的基本名称匹配的已加载模块。如果名称匹配,则加载成功。否则,该函数将搜索该文件。[...]

有关 DLL 搜索顺序的详细信息,请参阅动态链接库搜索顺序

文件名不区分大小写,因此 NTFS 和 FAT 文件名是。不区分大小写是基本规则:

命名约定

以下基本规则使应用程序能够创建和处理文件和目录的有效名称,而不管文件系统如何:[...]

不要假设区分大小写。

于 2012-12-25T15:11:25.640 回答