Qt & MemoryModule - Загрузка DLL из памяти без LoadLibrary



  • Пишу программу и возникла резкая необходимость сохранить тело DLL библиотеки (тоже написанной мной) в памяти программы. т.е. библиотека хранится не в файле, а внутри exe и загружается из памяти exe файла без сохранения библиотеки в файл.

    Для решения этой задачи решил прибегнуть к MemoryModule, которая берёт на себя задачу по загрузке библиотеки в память, аналогично LoadLibrary.

    Проблема в том, что библиотека после загрузки крашится в пространстве QT в DllEntry. Там происходит инициализация всех переменных и классов, в том числе и тех, что прячутся под капотом QT.

    Протестировал в QT версии 5.5.1, 5.12.2 и 5.13.0 в32 и 64 бита, везде одинаково.

    Продебажить не получается, потому, что дебаг отображает все в ассемблере, но одно ясно наверняка. Всё работает, если не наследоваться от QObject.

    Т.е. проблема кроется где-то в инициализации библиотеки.

    Подключение всех зависимостей проверил, все библиотеки имортируется корректно.

    Если не выполнять запуск DllEntry, много чего работает, но касаемо сигналов слотов, потоков и qobject-ов ничего нормально не работает. Исключение - окна (те что в DLL), они работают (кроме их сигналов)

    Импорты, без запуска DllEntry, тоже работают.

    Подскажите, какие подводные камни кроются под капотом QT, которые могут препядствовать разворачиванию библиотек.
    Или посоветуйте способ загрузки Dll написанной на QT из памяти.



  • Нашлась проблема. Дело было в выводе логов, там класс ненаходил куда выводить лог и вываливался в ядре QT. Убрали вывод логов и все заработало


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.