启用VLD内存泄漏检测后动态加载DLL失败的问题咨询
VLD导致LoadLibraryW无法加载子目录DLL的原因
- VLD(Visual Leak Detector)启用时会向目标进程注入自身的检测DLL,这个过程会修改Windows默认的DLL搜索路径优先级。系统原本的
LoadLibraryW搜索逻辑包含应用程序目录、系统目录、PATH环境变量指定目录等,但VLD会调整这个顺序,甚至移除对自定义子目录的搜索支持,导致子目录中的DLL不在新的搜索路径范围内。 - 主应用同目录属于DLL搜索路径的最高优先级范畴,即便VLD调整了路径,这个目录依然会被优先扫描,所以放在这里的DLL能正常加载;而子目录不在VLD修改后的有效搜索路径里,因此
LoadLibraryW无法定位到这些DLL。 - 另外,VLD启动时可能会修改进程的当前工作目录,如果你的代码是用相对路径加载子目录DLL,工作目录变更后相对路径指向的位置就会出错,进一步导致加载失败。
内容的提问来源于stack exchange,提问作者Genmiao Rong
相关产品推荐
相关产品推荐

