Системы плагинов в Qt: QPluginLoader, интерфейсы плагинов, динамическая загрузка модулей и расширяемая архитектура приложений. Пошаговые примеры создания хост-приложения и плагинов к нему.
Архитектура plugin-based приложения: пример расширяемого редактора
Введение В заключительной статье цикла соберём вместе концепции из предыдущих девяти статей в цельную архитектуру — спроектируем расширяемый текстовый редактор, где функциональность форматирования, экспорта и подсветки синтаксиса реализована…
Подписывание и верификация плагинов для безопасности
Введение Система плагинов, загружающая произвольный код из файлов на диске, по своей природе расширяет поверхность атаки приложения — если злоумышленник может подменить файл легитимного плагина на вредоносный (через…
Плагины QML: создание собственных расширений через QQmlExtensionPlugin
Введение Помимо плагинов общего назначения, рассмотренных в предыдущих статьях, у Qt Quick есть собственный специализированный механизм плагинов — QQmlExtensionPlugin, позволяющий упаковать набор QML-типов (C++ классы, зарегистрированные для использования…
Hot-reload плагинов во время работы приложения
Введение Во время разработки плагина перезапуск всего основного приложения после каждого изменения кода плагина замедляет цикл разработки. Hot-reload — возможность выгрузить старую версию плагина и загрузить новую, пересобранную…
Песочница для плагинов: изоляция и обработка крашей сторонних плагинов
Введение Плагин, написанный сторонним разработчиком и загруженный в адресное пространство основного процесса через QPluginLoader, технически имеет полный доступ ко всей памяти процесса — баг или преднамеренно вредоносный код…
Версионирование ABI плагинов и проблемы совместимости
Введение ABI (Application Binary Interface) совместимость — один из самых коварных аспектов системы плагинов на C++: даже минимальное на первый взгляд изменение в коде приложения или общих заголовочных…
Метаданные плагинов через JSON (Q_PLUGIN_METADATA) и поиск по ним
Введение Помимо самого IID интерфейса, плагин может нести произвольные дополнительные метаданные — версию, автора, список поддерживаемых форматов файлов, требования к окружению — через JSON-блок, встроенный непосредственно в Q_PLUGIN_METADATA.…
Статические vs динамические плагины в Qt: когда что выбрать
Введение Qt поддерживает два принципиально разных режима использования плагинов: динамические (классический случай — отдельные библиотеки, загружаемые в рантайме через QPluginLoader, разобранный в предыдущих статьях) и статические (плагин компилируется…