【发布时间】:2011-08-12 07:37:00
【问题描述】:
DLL 查找路径,如in MSDN 所述,为:
- 当前进程的可执行模块所在目录。
- 当前目录。
- Windows 系统目录。 GetSystemDirectory 函数检索此目录的路径。
- Windows 目录。 GetWindowsDirectory 函数检索此目录的路径。
- PATH 环境变量中列出的目录。
这引发了以下疑问:
假设我在某个目录中有一个可执行文件,例如:c:\execdir\myexe.exe,它加载了一个在PATH 中找到并位于c:\dlldir\mydll.dll 中的DLL。现在,假设mydll.dll 尝试使用LoadLibrary 加载另一个DLL。首先查看哪个目录 - c:\dlldir 或 c:\execdir?
我认为上面引用的查找规则说它将是c:\execdir,因为据称这是“当前进程的可执行模块所在的目录”,但是从另一个来源获得确认会很好。
编辑:另外,c:\dlldir\ 是否看过?毕竟,它既不是 .exe 所在的位置,也不是“当前目录”(如果这是一般意义上的意思的话)。
附:我对 Windows XP 和 7 都感兴趣。
【问题讨论】:
-
我不明白您在阅读文档后有什么困惑。这对我来说似乎很清楚。为什么加载第二个 DLL 会改变路径查找顺序?
-
@Cody:因为它是第二个 DLL,而不是 .exe - .exe 甚至不知道从第一个加载的第二个 DLL
-
@Hans:谢谢,我编辑了另一个相关问题
-
c:\dlldir 被隐式查看。否则将永远找不到 DLL。 5 条规则中只有两条适用:PATH 或当前目录。
标签: windows dll path loadlibrary