LoadLibrary A在哪里寻找文件?

时间:2012-12-25 15:05:39

标签: c++ windows dll loadlibrary

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

2 个答案:

答案 0 :(得分:3)

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

  
      
  1. 加载应用程序的目录。
  2.   
  3. 系统目录。使用GetSystemDirectory函数获取此目录的路径。
  4.   
  5. 16位系统目录。没有函数可以获取此目录的路径,但会搜索它。
  6.   
  7. Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
  8.   
  9. 当前目录。
  10.   
  11. PATH环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径时不使用App Paths键。
  12.   

答案 1 :(得分:2)

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

  

如果lpFileName不包含路径且有多个路径   加载模块具有相同的基本名称和扩展名,功能   返回首先加载的模块的句柄。

     

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

     

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

文件名不区分大小写,因此NTFS和FAT文件名是。 fundamental rule不假设区分大小写:

  

命名约定

     

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

     

不要假设区分大小写。