0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38

Плагины с очень сильным использованием функционала основного приложения

28.07.2026, 06:40. Показов 2349. Ответов 42

Студворк — интернет-сервис помощи студентам
Добрый день!

Имеется программа на GNU C++ для проведения весьма сложных инженерных расчетов. В ней пользователь составляет расчетные схемы промышленных объектов из очень большого набора устройств и производит их моделирование. В каком-то очень упрощенном смысле работа похожа на расчет электрических схем (хотя к электричеству отношения почти не имеет). Добавляем на схему резисторы, транзисторы, микросхемы, настраиваем их параметры и рассчитываем все токи и напряжения.

Так вот, возникла необходимость реализовать работу с плагинами. Например, чтобы человек мог добавить в программу свою собственную микросхему.

В начале была попытка организовать работу плагинов через два типа интерфейсов IPlugin для плагинов и IMainApp для основного приложения. Однако быстро выяснилось, что такой подход практически сводит на нет функциональные возможности плагинов. Дело в том, что для полноценной работы плагину нужна львиная доля функционала основного приложения. Именно в этом смысл продукта, так как создание расчетной модели каждого элемента схемы может быть сравнимо с написанием диплома или даже диссертации. Поэтому интерфейс IMainApp, по сути, должен был содержать значительную часть классов основного приложения.

Поэтому было реализовано другое решение. Процентов 80 от основной программы было выделено в две большие динамические библиотеки. Одна предоставляет ворох возможностей для технических расчетов, другая служит для работы со структурными техническими схемами. Обе библиотеки представлены в виде динамических библиотек lib.dll, соответствующих им статических библиотек lib.a и наборов заголовочных файлов *.h. Эти файлы совместно с документацией объединены в SDK для плагинов. Самый важный момент: при сборке каждый плагин линкуется со обеими статическими библиотеками. Это дает возможность при загрузке плагина в приложение использовать весь функционал последнего. По сути, плагин становится просто частью основной программы. Результаты получились выше всяких похвал, функциональные возможности плагинов выходят просто замечательные.

Минусом является то, что для каждой новой версии продукта необходимо выпускать новую версию SDK с актуальными библиотеками, указывать версию MinGW/GCC и пересобирать все плагины. Но это совершенно не пугает, это для нас нормально.

Тем не менее терзают вопросы:
1. Не является ли это решение (линковка плагинов со статическими библиотеками основного приложения) в корне неверным, так как существует другой гораздо более удачный подход?
2. Не является ли вынос основного движка продукта в динамические библиотеки (и соответствующие им статические) серьезной угрозой безопасности продукта? Планируется реализовать защиту этих библиотек в том числе с помощью USB-ключей. Но тем не менее…
3. Какие возможные действия можно предпринять для снижения опасности реверс-нижиниринга для этих библиотек?

Понимаю, что в двух словах на эти вопросы не ответишь. Пишу в надежде на то, что у кого-то есть опыт решения схожих задач. Я, скорее, инженер, чем программист. Поэтому все тонкости и подводные камни такого решения мне оценить трудно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2026, 06:40
Ответы с готовыми решениями:

Я по по воду хакерства.В последнее время это меня очень сильно заинтересовало может посоветуете чего нибудь(книги,программы и тд ) буду очень благодар
Прошу прощения , но я не нашел подходящей темы и решил написать сюда т.к. единственное что я знаю...

Вызов подпрограммы из основной программы, с сохранением работоспособности основной программы?(подробно внутри)
Добрый день. Буду благодарен, если кто-нибудь подскажет как такое реализовать. Суть вопроса: ...

Очень сильно надо
Пожалуйста помогите, очень сильно надо. Дано натуральное число n. Получить действительную матрицу ...

42
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
02.08.2026, 18:13  [ТС]
Студворк — интернет-сервис помощи студентам
Возможно, я ошибаюсь в терминологии (не ругайте, я инженер, а не профессиональный программист).

Библиотеки wxWidgets и common - динамические, в код плагина не вливаются. Но при их компиляции под виндой создаются мелкие библиотеки импорта .a, которые линкуются при сборке основного проекта и плагина.


Миниатюры
Плагины с очень сильным использованием функционала основного приложения  
Изображения
 
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,149
Записей в блоге: 2
02.08.2026, 21:19
Цитата Сообщение от steevis Посмотреть сообщение
Библиотеки wxWidgets и common - динамические, в код плагина не вливаются. Но при их компиляции под виндой создаются мелкие библиотеки импорта .a, которые линкуются при сборке основного проекта и плагина.
Ну значит это мелкая техническая подробность конкретной платформы, зачем пугать общественность "статической" линовкой?

Цитата Сообщение от steevis Посмотреть сообщение
Основные положения:
А может Вы просто переоцениваете проблемы? Почему бы не действовать прямолинейно, "по пути наименьшего сопротивления"? Плагину нужен wxWidgets? Подключим ее к плагину. Нужна (большая) либа для расчетов? Тоже подключим. Какие проблемы? Почему это не должно работать?

Только нужно не просто "загрузить либу", а именно ту ее "instance" что в хосте. Чтобы все переменные/установки сделанные хостом были видимы в плагине (пример qApp выше) и наоборот. Др словами инстансы либ в плагине и хосте должны юзать одни те же данные. Как это сделать в вындоуз - читал очень давно, помню только что так делать можно. Ничего, разберетесь
0
-679 / 40 / 0
Регистрация: 10.03.2025
Сообщений: 568
03.08.2026, 10:45
И вообще как не прогер, позволю себе глобальный совет, ибо жираф большой, ему видней
в линукс все в мелких пакетах, ну зачем писать большой функционал в одной большой
проге, каждая функция в отдельном пакете (это же конгениально), обновил функцию
обновил версию пакета, и не надо потом мучаться, что можно показать заказчику

Любой сложный механизм состоит из кучи мелких деталей, громадная там какая
нибудь бестолковая рама или корпус, которая все держит, ну так инженеру
сама профессия подсказывает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.08.2026, 10:45

Word automation + Windows server 2008 R2 = тормоза(очень сильные тормоза)
Здравствуйте! Есть код, написанный правда на делфи, который экспортирует содержимое ТХТ файла в...

Очень сильно нужно по С++
Задача: Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его...

Напишите пожалуйста программу. Не очень сильно разбираюсь в c++ и именно в структур. Сейчас только все осваиваю
Создать структуру для базы данных "Школьник" с полями: фамилия, имя, номер школы, класс. Ввести...

Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах!
Здравствуйте! Если сделать плагин для QML и подключить его в основном проекте ну как - то так:...

Безумно очень очень нуждаюсь в вашем содействии!
Завтра экзамен!!начинается пол 10!если есть еще такие ,которые могут помочь в написании программ!не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Опции темы

Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru