БГ
Наурыз 10, 2021, 1 Т.Ж.

Правильная выгрузка плагинов

plugin

Всем привет!

Есть плагин (.dll), при работающем приложении пытаюсь выгрузить и подменить его на другой (обновить).
В логах пишет QLibraryPrivate::unload succeeded, но при попытке подменить операционная система сообщает что файл занят процессом.
Вот пример того что я пытаюсь сделать

  1. QPluginLoader *pluginLoader = new QPluginLoader;
  2. pluginLoader->setFileName("plugins/plugin");
  3. IFactory *factory = qobject_cast<IFactory *>(pluginLoader->instance());
  4.  
  5. plugin->unload();
  6. qDebug() << plugin->isLoaded(); //false
  7. delete plugin;
  8.  
  9. QThread::sleep(1000);

Я так думаю здесь замешан factory, но что я с ним должен сделать? Удалять пробовал - не помогло, приложение падает.

1

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

1
БГ
  • Наурыз 21, 2021, 5:50 Т.Қ.

Нашел ответ https://stackoverflow.com/questions/36132995/unload-all-qt-dlls
Здесь говорят что нельзя полностью выгрузить dll, и он остается загруженным вплоть до завершения программы.
Но на телеграм-канале дали подсказку, что надо убирать флаг PreventUnloadHint и у меня получилось сделать задуманное.

    Пікірлер

    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
    Кіріңіз немесе Тіркеліңіз