Windows下Visual Studio C++项目如何使用位于其他文件夹的DLL
解决方案
方案1:仅VS调试运行时生效,无需修改系统环境变量
该方案无需改动代码,仅需分开配置Debug和Release路径即可:
- 右键项目 → 选择「属性」
- 顶部「配置」下拉框先切换到
Debug,「平台」选择你项目的目标平台(如x64) - 依次展开「配置属性」→「调试」
- 在「环境」项填入:
PATH=$(LIB_DEBUG);%PATH%($(LIB_DEBUG)为你自定义的Debug版本DLL目录环境变量 - 将「合并环境」选项设置为「是」
- 再将顶部「配置」切换到
Release,重复上述操作,「环境」项改为PATH=$(LIB_RELEASE);%PATH% - 点击确定保存配置,重启VS即可生效
之前配置不生效大概率是因为未区分配置直接选了「所有配置」,或是自定义路径未放在PATH最前面,导致系统优先加载了其他路径下的同名DLL。
方案2:同时支持VS调试、直接双击exe运行生效
如果需要脱离VS也能正常加载对应DLL,不需要复制DLL到项目目录,可以配合延迟加载实现:
- 右键项目 → 属性,切换到对应配置(Debug/Release分别设置)
- 展开「配置属性」→「链接器」→「输入」,在「延迟加载的DLL」项填入你要加载的DLL文件名
- 再展开「配置属性」→「C/C++」→「预处理器」,在「预处理器定义」项,Debug配置下添加
LIB_DEBUG_PATH=L"$(LIB_DEBUG)",Release配置下添加LIB_RELEASE_PATH=L"$(LIB_RELEASE)" - 在程序入口函数的最开头添加如下代码:
#ifdef _DEBUG SetDllDirectory(LIB_DEBUG_PATH); #else SetDllDirectory(LIB_RELEASE_PATH); #endif
调用
SetDllDirectory会优先从指定目录加载DLL,不需要修改系统环境变量,也不需要复制DLL到项目目录。
内容的提问来源于stack exchange,提问作者Il'ya Zhenin
相关产品推荐
相关产品推荐

