【发布时间】:2017-03-19 00:02:22
【问题描述】:
我正在使用 Visual Studio 2017 开发一个 C++ 项目。
我已将 SDL2 安装在自定义目录中(不在 PATH 中)。
我正在创建一个使用 SDL2 的 DLL。
我在项目属性中添加了 SDL2 目录(VC++ Directories -> Library Directories,我也尝试了Reference Directories)并且它编译正确。
然后在 Core 程序中,我使用 LoadLibraryA 加载我的 DLL,但它失败了(getLastError() 告诉我错误 126)。
我用 Dependency Walker 查找,但找不到 SDL2.DLL。
我还用Process Monitor查看,我看到它首先在当前目录中寻找SDL2.dll,然后是PATH环境变量中的所有目录。由于 SDL2 不在 PATH 目录中,加载失败,故事结束,我很伤心。
我当然可以将SDL2安装目录添加到PATH变量中,但我不想这样做,因为一些原因。
我的配置有什么需要改变的吗?
谢谢。
解决方案:
我找到了解决方法。
我的核心程序加载lib.dll,需要SDL2.dll。
相反,我可以创建另一个 dll,例如 libloader.dll。在这个中,我使用SetDllDirectory 来判断SDL2.dll 的位置,然后我使用LoadLibraryA 来加载lib.dll。
因为我在lib.dll 中有一个入口点,所以我只需要将它包装在libloader.dll 入口点中。
这样,我就不必将SDL2.dll 的位置放在核心中。
【问题讨论】:
-
如果dll有依赖,它只搜索dll名称而不搜索绝对?所以我必须设置我的PATH?我有点难过
标签: c++ visual-c++ dll