|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
Плагины с очень сильным использованием функционала основного приложения28.07.2026, 06:40. Показов 2208. Ответов 42
Добрый день!
Имеется программа на GNU C++ для проведения весьма сложных инженерных расчетов. В ней пользователь составляет расчетные схемы промышленных объектов из очень большого набора устройств и производит их моделирование. В каком-то очень упрощенном смысле работа похожа на расчет электрических схем (хотя к электричеству отношения почти не имеет). Добавляем на схему резисторы, транзисторы, микросхемы, настраиваем их параметры и рассчитываем все токи и напряжения. Так вот, возникла необходимость реализовать работу с плагинами. Например, чтобы человек мог добавить в программу свою собственную микросхему. В начале была попытка организовать работу плагинов через два типа интерфейсов IPlugin для плагинов и IMainApp для основного приложения. Однако быстро выяснилось, что такой подход практически сводит на нет функциональные возможности плагинов. Дело в том, что для полноценной работы плагину нужна львиная доля функционала основного приложения. Именно в этом смысл продукта, так как создание расчетной модели каждого элемента схемы может быть сравнимо с написанием диплома или даже диссертации. Поэтому интерфейс IMainApp, по сути, должен был содержать значительную часть классов основного приложения. Поэтому было реализовано другое решение. Процентов 80 от основной программы было выделено в две большие динамические библиотеки. Одна предоставляет ворох возможностей для технических расчетов, другая служит для работы со структурными техническими схемами. Обе библиотеки представлены в виде динамических библиотек lib.dll, соответствующих им статических библиотек lib.a и наборов заголовочных файлов *.h. Эти файлы совместно с документацией объединены в SDK для плагинов. Самый важный момент: при сборке каждый плагин линкуется со обеими статическими библиотеками. Это дает возможность при загрузке плагина в приложение использовать весь функционал последнего. По сути, плагин становится просто частью основной программы. Результаты получились выше всяких похвал, функциональные возможности плагинов выходят просто замечательные. Минусом является то, что для каждой новой версии продукта необходимо выпускать новую версию SDK с актуальными библиотеками, указывать версию MinGW/GCC и пересобирать все плагины. Но это совершенно не пугает, это для нас нормально. Тем не менее терзают вопросы: 1. Не является ли это решение (линковка плагинов со статическими библиотеками основного приложения) в корне неверным, так как существует другой гораздо более удачный подход? 2. Не является ли вынос основного движка продукта в динамические библиотеки (и соответствующие им статические) серьезной угрозой безопасности продукта? Планируется реализовать защиту этих библиотек в том числе с помощью USB-ключей. Но тем не менее… 3. Какие возможные действия можно предпринять для снижения опасности реверс-нижиниринга для этих библиотек? Понимаю, что в двух словах на эти вопросы не ответишь. Пишу в надежде на то, что у кого-то есть опыт решения схожих задач. Я, скорее, инженер, чем программист. Поэтому все тонкости и подводные камни такого решения мне оценить трудно.
0
|
|
| 28.07.2026, 06:40 | |
|
Ответы с готовыми решениями:
42
Я по по воду хакерства.В последнее время это меня очень сильно заинтересовало может посоветуете чего нибудь(книги,программы и тд ) буду очень благодар Вызов подпрограммы из основной программы, с сохранением работоспособности основной программы?(подробно внутри) Очень сильно надо |
|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
| 02.08.2026, 18:13 [ТС] | |
|
Возможно, я ошибаюсь в терминологии (не ругайте, я инженер, а не профессиональный программист).
Библиотеки wxWidgets и common - динамические, в код плагина не вливаются. Но при их компиляции под виндой создаются мелкие библиотеки импорта .a, которые линкуются при сборке основного проекта и плагина.
0
|
|
| 02.08.2026, 21:19 | |||
|
Только нужно не просто "загрузить либу", а именно ту ее "instance" что в хосте. Чтобы все переменные/установки сделанные хостом были видимы в плагине (пример qApp выше) и наоборот. Др словами инстансы либ в плагине и хосте должны юзать одни те же данные. Как это сделать в вындоуз - читал очень давно, помню только что так делать можно. Ничего, разберетесь
0
|
|||
|
-679 / 40 / 0
Регистрация: 10.03.2025
Сообщений: 561
|
|
| 03.08.2026, 10:45 | |
|
И вообще как не прогер, позволю себе глобальный совет, ибо жираф большой, ему видней
в линукс все в мелких пакетах, ну зачем писать большой функционал в одной большой проге, каждая функция в отдельном пакете (это же конгениально), обновил функцию обновил версию пакета, и не надо потом мучаться, что можно показать заказчику ![]() Любой сложный механизм состоит из кучи мелких деталей, громадная там какая нибудь бестолковая рама или корпус, которая все держит, ну так инженеру сама профессия подсказывает
0
|
|
| 03.08.2026, 10:45 | |
|
Word automation + Windows server 2008 R2 = тормоза(очень сильные тормоза)
Напишите пожалуйста программу. Не очень сильно разбираюсь в c++ и именно в структур. Сейчас только все осваиваю Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах! Безумно очень очень нуждаюсь в вашем содействии! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|