帮助解释MSDN:
动态链接库搜索顺序
...
如果已经在内存中加载了相同模块名称的DLL ,则 系统在解析之前仅检查重定向和清单 加载的DLL,无论它在哪个目录中。系统 不搜索DLL 。
注意:基本上的多个具有相同名称的DLL 是一个坏主意,这只是为了获得更好的图片。
考虑:
...\x\foo.exe
...\x\a\bar.dll ~ no further dependencies
...\x\b\bar.dll ~ no further dependencies
是否可以使用显式加载库调用将这两个bar.dll
加载到foo.exe
中? 和在哪里/如何记录和支持(否则我只是尝试它。)
也就是说,以下内容可以在Windows7 +上可靠地运行:
// Load using full path:
HANDLE a_mod = LoadLibrary(L"...\x\a\bar.dll");
HANDLE b_mod = LoadLibrary(L"...\x\b\bar.dll");
// now use moth DLLs ...
答案 0 :(得分:5)
从文档(强调我的):
桌面应用程序可以通过指定完整路径,使用DLL重定向或使用清单来控制加载DLL的位置。 如果没有使用这些方法,系统会在加载时搜索DLL,如本节所述。
在系统搜索之前,它会检查以下内容:
- 如果已在内存中加载了具有相同模块名称的DLL,则系统将使用加载的DLL,无论它在哪个目录中。系统不会搜索DLL。
因此,当您提供完整路径时,您所担心的条款并不适用。