Проблема загрузки DLL с Boost DLL по другому пути, когда она имеет зависимости - PullRequest
0 голосов
/ 27 июня 2019

Я использую 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 голосов
/ 27 июня 2019

Я нашел решение, благодаря комментариям Ричарда.

Это команда:

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 при загрузке, когда искал, как использовать соответствующий LOAD_WITH_ALTERED_SEARCH_PATH с использованием Windows.

...