【发布时间】:2016-12-23 07:51:42
【问题描述】:
假设:
- 我有一个名为 A.exe 的可执行文件,它位于路径:PathA。
- A.exe 加载库 B.dll、B.dll 加载库 C.dll。
- B.dll 位于路径:PathB。 C.dll 在 PathA 和 PathB 中都有一个副本。
所以我的问题是:当A.exe加载B.dll时,B.dll会加载C.dll的哪个路径?
在我的情况下,C.dll 有一些不同,比如一个是 _cdecl,另一个是 _stdcall。移除 PathA 中的 c.dll 后,A.exe 可以成功加载 B.dll;但是当 PathA 中的 c.dll 存在时,它会失败
【问题讨论】:
-
PathA\C.dll将加载到您的场景中。LoadLibrary不知道是哪个模块在调用它;只有 EXE 的目录在搜索路径上。LoadLibrary的文档详细描述了搜索算法(因为它具有安全隐患)。 -
是的,你是对的。调试后,我知道如果PathA\c.dll不存在,它会加载PathB\c.dll。一切都是关于 loadlibrary 的搜索策略。感谢您的帮助!
标签: visual-c++ dll loadlibrary