【问题标题】:where is LoadLibrary A looking for the file?LoadLibrary A 在哪里寻找文件?
【发布时间】:2012-12-25 15:05:38
【问题描述】:

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

【问题讨论】:

  • 如果我没记错的话,在线文档对搜索策略进行了很多讨论。我会去那里看看。就区分大小写而言,如果文档中没有明确说明,那应该很容易测试自己...

标签: c++ windows dll loadlibrary


【解决方案1】:

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 键。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    命名约定

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

    不要假设区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-25
      • 2015-03-28
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多