Задать вопрос
@snovik

Как динамически загрузить DLL из памяти в QT?

Здравствуйте.

WINAPI функция LoadLibrary, QLibrary, QPluginLoader: все эти функции принимают путь к библиотеке. Есть способ загрузить динамически DLL из памяти (массив байт), если нет возможности ее сохранить на диск?

P.S. В самом лучшем случае чтобы это делалось с использованием QPluginLoader.
  • Вопрос задан
  • 471 просмотр
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
@vilgeforce
Раздолбай и программист
Есть способ: выделяете память, эмулируете работу загрузчика Windows, передаете управление. Только так делать плохо.
Ответ написан
Комментировать
Все эти функции необходимы чтобы отобразить образ файла в адресное пространство и провести динамическую линковку. Если у вас уже образ DLL находится в памяти, вам не нужно его отображать и эти функции просто не нужны. Необходимо слинковать таблицу импорта (если там что-то есть), это не сложная операция, и пометить память как исполняемую через VirtualProtect. Но место, разумеется, надо выделять так, чтобы библиотека была загружена по границе страницы, например через VirtualAlloc.

с QT это никак не связано.
Ответ написан
Комментировать
@snovik Автор вопроса
Было найдено решение данного вопроса: https://github.com/fancycode/MemoryModule
Есть только один нюанс, библиотека не загружается если имеются чисто виртуальные функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы