Удалить dll после загрузки QLibrary

#c #qt #dllimport

#c #qt #dllimport

Вопрос:

Я использую QLibrary для разрешения символов в моей программе QT. Мне нужно обновить библиотеку во время работы приложения. Поэтому я пытаюсь удалить текущий файл библиотеки, но файл заблокирован моим приложением.

 QLibrary lib("mylib.dll");
if (lib->load())
    myfun = (MyFun) lib.resolve("myfun");
lib.unload();
myfun();
QFile::remove("mylib.dll"); // error on windows, success on linux mylib.so
 

Он отлично работает в Linux, но не работает в Windows.

Я также пытался удалить mylib.dll вручную при запуске приложения и получении сообщения об ошибке «файл открыт в myapp.exe «.

Я использую QT 5.7 с компилятором msvc2015.

Комментарии:

1. именно так файловые системы различаются в Windows и Linux.

2. QLibrary::unload() возвращает true при успешном завершении, какое возвращаемое значение для вас?

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