在Windows上搜索DLL

时间:2010-03-17 14:55:12

标签: dll windows-7 environment-variables

在linux上,我们有LIBRARY_PATHLD_LIBRARY_PATH个环境变量,以便程序搜索库。我们在窗户上有类似的东西吗?特别是Windows 7?

此外,我想知道DLL使用的最佳实践(在哪里放置它们,使用envs或不使用envs等),因为我想像所有人一样在Windows上工作,而不是懒散于工作区:)

4 个答案:

答案 0 :(得分:12)

This MSDN article解释了默认搜索顺序。我引用:

  1. lpFileName指定的目录。
  2. 系统目录。使用GetSystemDirectory函数获取此目录的路径。
  3. 16位系统目录。没有函数可以获取此目录的路径,但会搜索它。
  4. Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
  5. 当前目录。
  6. PATH环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径时不使用App Paths键。
  7. 在(1)中,如果你静态链接DLL的存根库,我认为“lpFileName指定的目录”是进程的exe路径。

答案 1 :(得分:1)

查看LoadLibraryCreateProcess功能的帮助。这些描述了用于定位DLL的路径,以及如何修改它们。

答案 2 :(得分:0)

它首先在currentDir上查找,然后在你的路径中查看WinDir和SystemDir

答案 3 :(得分:0)

根据@andrew在回答中提到的内容,Windows用来搜索DLL的文件夹的顺序可能与一种配置不同。我认为在Windows上检查此顺序的最简单方法是使用Dependency Walker工具。打开工具并按下工具栏上的“配置模块搜索顺序”按钮后,您将看到一个类似这样的窗口:

enter image description here

此窗口显示您机器上的当前搜索顺序。有趣的是,通过按“扩展”,您可以在搜索路径中一个一个地查看整个文件夹。您也可以根据需要更改顺序,以用于加载特定模块。