问题在具有依赖性时从其他路径上加载DLL的DLL

Problem loading a DLL with boost DLL from a different path when it has dependencies

本文关键字:DLL 路径 加载 其他 依赖性 问题      更新时间:2023-10-16

我在运行时使用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放在同一文件夹中,一切都将开始工作。但是我想将插件放在单独的文件夹中,因为我希望其他用户能够从各自的文件夹中加载插件。

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

我找到了解决方案,这要归功于理查德评论。

这是命令:

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使用Windows的方式使用相应的LOAD_WITH_ALTERED_SEARCH_PATH时。