Mar*_* Ba 4 windows dll winapi loadlibrary visual-c++
帮助解释MSDN:
动态链接库搜索顺序
...
如果具有相同模块名称的DLL 已经在内存中加载,则系统在解析到已加载的DLL之前,仅检查重定向和清单,无论它位于哪个目录中。系统都不会搜索DLL。
注意:多个具有相同名称的DLL基本上不是一个好主意,这只是为了获得更好的画面。
考虑:
...\x\foo.exe
...\x\a\bar.dll ~ no further dependencies
...\x\b\bar.dll ~ no further dependencies
Run Code Online (Sandbox Code Playgroud)
是否可以通过显式加载库调用将这两个都加载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 ...
Run Code Online (Sandbox Code Playgroud)
从文档(重点是我的):
桌面应用程序可以通过指定完整路径,使用DLL重定向或使用清单来控制DLL的加载位置。如果未使用这些方法,则系统将如本节所述在加载时搜索DLL。
在系统搜索 DLL之前,它会检查以下内容:
- 如果内存中已加载了具有相同模块名称的DLL,则无论使用哪个DLL,系统都将使用该DLL。系统不会搜索该DLL。
因此,提供完整路径时,您担心的子句将不适用。