在具有依赖性的情况下,使用boost DLL从其他路径加载DLL时出现问题

时间:2019-06-27 15:14:09

标签: c++ boost dll dllimport boost-dll

我使用boost::dll在运行时加载库。

使用以下代码,即使它位于与带有可执行文件的文件夹不同的文件夹中,我也能够加载该DLL:

auto creator = boost::dll::import_alias<pluginapi_create_t>(fileName, "createPlugin", boost::dll::load_mode::append_decorations);

但是当DLL具有其他依赖项时,我遇到了问题。这是我的文件夹结构的一个示例:

Main Folder
|
|-program.exe
|
|-pluginsfolder
  |
  |-plugin1.dll
  |-plugin2.dll
  |-dependency.dll

如果我加载plugin1.dll(没有其他依赖项),它将起作用。

如果我加载plugin2.dll,则需要dependency.dll,它将无法正常工作。

我想我可以将所有DLL放在同一个文件夹中,然后一切将再次开始工作。但我想将插件保存在单独的文件夹中,因为我希望其他用户能够从各自的文件夹中加载插件。

无论插件在文件系统中的位置如何,如何加载具有依赖项的插件?

1 个答案:

答案 0 :(得分:0)

我已经找到了解决方案,这要感谢Richard的评论。

这是命令:

auto creator = boost::dll::import_alias<pluginapi_create_t>(fileName, "createPlugin", boost::dll::load_mode::append_decorations | boost::dll::load_mode::load_with_altered_search_path);

我在加载时添加了boost::dll::load_mode::load_with_altered_search_path标志,同时搜索了Windows如何使用本机使用相应的LOAD_WITH_ALTERED_SEARCH_PATH