我使用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放在同一个文件夹中,然后一切将再次开始工作。但我想将插件保存在单独的文件夹中,因为我希望其他用户能够从各自的文件夹中加载插件。
无论插件在文件系统中的位置如何,如何加载具有依赖项的插件?
答案 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
。