2012-12-25 39 views
0

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

+0

如果我没有记错,在线文档会谈论很多关于搜索策略。我会看那里。就区分大小写而言,如果在文档中没有明确说明,那么测试自己应该是​​一件容易的事情...... – tmpearce

回答

2

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

如果lpFileName的对象不包括路径和存在具有相同基名和扩展名, 返回的句柄功能不止一个 加载的模块首先加载的模块。

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

有关DLL搜索顺序的更多信息,请参阅Dynamic-Link Library Search Order

文件名不区分大小写,所以NTFS和FAT文件名是。这是fundamental rule不承担大小写:

命名约定

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

不要假定区分大小写。

2

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键。
相关问题