在Windows上搜索DLL

Luí*_*rme 12 dll environment-variables windows-7

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

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

And*_*dge 14

此MSDN文章解释了默认搜索顺序.我引用:

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

在(1)中,如果你静态链接DLL的存根库,我认为"由lpFileName指定的目录"是进程的exe的路径.

  • 该答案描述了*备用搜索顺序*。大多数应用程序默认使用*标准搜索顺序*,即首先搜索应用程序目录,而当前工作目录是在系统目录之前还是之后搜索取决于“SafeDllSearchMode”。这不是最近发生的变化;情况就是这样[早在2011年](https://web.archive.org/web/20110529192020/http://msdn.microsoft.com/en-us/library/ms682586(v=vs.85).aspx )当答案被写下并且[仍然适用](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)。 (2认同)