|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
Плагины с очень сильным использованием функционала основного приложения28.07.2026, 06:40. Показов 4686. Ответов 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
|
|
| 31.07.2026, 13:43 [ТС] | |
|
Спасибо за важные замечания!
Нужно отметить следующую особенность. Пользователи продукта - исключительно научно-технические и промышленные предприятия. Со всеми ними имеется самое тесное взаимодействие: совместная работа, консультации, техподдержка. Плагины, скорее всего, будут писаться под пристальным вниманием вендора. Со временем можно думать и о отдельном API на C и о своих скриптах, но пока задача запустить и обкатать самый первый вариант работы.
0
|
|
| 31.07.2026, 14:03 | ||||||
![]() Может в данном случае лучше вместо "плагины" уместнее использовать термин "SDK" Добавлено через 15 минут Или даже "Framework" (по-нашему )
0
|
||||||
|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
| 31.07.2026, 14:12 [ТС] | |
|
0
|
|
|
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
|
||
| 31.07.2026, 14:31 | ||
|
0
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,091
|
||||
| 31.07.2026, 14:45 | ||||
|
0
|
||||
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
||||
| 31.07.2026, 18:51 | ||||
|
Да и вообще, судя по этому сообщению от ТС: ). Здравый смысл говорит - что ежели работает - НЕ ЛЕЗЬ!!!Тут видимо нужно новый проект начинать - архитектуру проработать как следует и начинать тырить код из основного проекта в новый, переписывая, переделывая. А основной я бы не трогал.
0
|
||||
| 31.07.2026, 20:59 | |||
|
Не по теме:
А ведь начиналось все хорошо. Материал, источники света, текстуры - все как в нормальном 3D приложении. А потом хирак - делайте все сами в шейдерах. И нормальной pipeline не дали. А raytrace даже не брались. Как и за volume(tric) и др - только полигоны. Хотя с ними не все слава богу. Понимаю что критиковать, особенно зная результат, ума много не надо. Лет 30 назад, когда все начиналось, C API и было лучшим решением, или даже единственным. Но оно отжило, исчерпало себя, так бывает, это нормально
0
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,091
|
||||||
| 31.07.2026, 21:10 | ||||||
|
Metal вообще не в ту степь, это какое-то извращение Эппла, сопоставимое с DirectX.
0
|
||||||
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
||||
| 31.07.2026, 21:42 | ||||
![]() В отвлечении от основной темы: По основной теме: Нужно пару вечеров / недель помозговать и начинать новый проект, а не ломать то, что и так работает.
0
|
||||
| 31.07.2026, 22:27 | ||||
Больше расскажут люди увлекающиеся играми
0
|
||||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,091
|
|||||
| 31.07.2026, 22:53 | |||||
|
Не отрицаю, что неверным может оказаться именно моя трактовка - тогда озвучьте свою.
0
|
|||||
| 01.08.2026, 00:25 | ||
|
Не по теме:
0
|
||
|
1121 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,448
|
|
| 01.08.2026, 09:55 | |
|
Без API плагины не работают. Тему можно закрывать.
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
| 01.08.2026, 11:41 [ТС] | |
|
API для плагинов, безусловно, есть и будет передаваться их разработчикам. А тему закрывает автор, когда сочтет это необходимым.
0
|
|
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
||||
| 01.08.2026, 13:34 | ||||
|
В общем - да нет никаких проблем с OGL 3+, кроме одной - он устаревший, потому как вроде бы ему на смену пришёл Vulkan. Я рассуждал так: всякие высокопоставленные дядьки из крупных международных корпораций чаще всего решают что будет актуально, а что нет в плане софта. Им ведь нужно продавать свои железки, а лучший способ это сделать - придумать новый апи, который поддерживается только ихним самым современным железом. Просто - что мешало вместо выдумывания того же Вулкана, просто взять и добавить всё тоже самое, только в опенгл? Задал этот вопрос нейронке и получил ответ: "Потому что архитектура OpenGL была рассчитана на видеокарты 90-х, а Vulkan — на современные GPU. Чтобы сделать OpenGL таким же эффективным, пришлось бы сломать почти всю обратную совместимость." Уж не знаю - права она или нет. Моих знаний тут явно не достаточно. Добавлено через 3 минуты - всякие обязательные классы - строгий порядок инициализации - прочие вещи А если просто прилинковал и пользуешься, добавив заголовочный файл - то это обычная либа. Добавлено через 7 минут
0
|
||||
|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
| 02.08.2026, 14:04 [ТС] | |
|
Спасибо за полезные советы.
После обдумывания идей и предложений решил начать работу со структурой, представленной на рисунке и описанной ниже. Основные положения: 1. На библиотеке wxWidgets основана работа всего проекта (как графического интерфейса, так и другой внутренней начинки), так что волей-неволей ее придется оставить. Она собирается в виде *.dll с соответствующими библиотеками импорта *.a. С последними линкуются статически все другие компоненты проекта, в том числе плагины. Переход с одной версии этой библиотеки на другую будет происходить нечасто, возможно раз в год. Библиотека входит в каждое обновление SDK в сконфигурированном и скомпилированном виде для всех операционных систем. Так что разработчику плагинов ничего делать не надо. 2. Библиотека общего функционала данного проекта. Представляет собой некоторое дополнение к библиотеке wxWidgets. Здесь содержатся настроенные под приложение элементы графического интерфейса и большой модуль для объединения всех компонентов документа (в нашем примере это электрическая схема, радиоэлементы, их ножки, настройки методов расчета и т.д.) в единое дерево. Обеспечивает возможность записи и чтения документа из файла, редактирования и проверки данных. Она тоже собирается и поставляется готовой в SDK в виде *.dll с соответствующими библиотеками импорта *.a. С ней линкуются статически другие компоненты проекта, в том числе плагины. Классы этой библиотеки экспортируются через dllexport. Структура библиотеки не секретна, достаточно хорошо видна разработчику плагинов и имеет очень подробную документацию в виде chm. Выпуск версий этой библиотеки примерно раз в полгода-год. 3. Основной расчетный движок выполняется в виде статической библиотеки, использует и линкуется с библиотеками wxWidgets и Common. Для него поверх всего функционала пишется новый слой API, состоящий из абстрактных классов (абстрактная электрическая схема, абстрактный ее элемент, абстрактный коннектор и т.д.). Весь функционал в итоге доступен в плагине через корневой класс Host, который возвращает указатели на крупные абстрактные модули движка. Также этот движок имеет небольшое API, с помощью которого основное приложение инициализирует работу. Линкуется к исполняемому файлу статически, имеет документацию только по абстрактному API. Выделен в отдельную библиотеку для того, чтобы на его основе можно было создавать и другие продукты. 4. В итоге работа плагина в основном сводится к конструированию своих собственных узлов, встраиванию их в общий документ с помощью библиотеки Common и, самое главное, реализацию расчетов через API расчетного движка.
0
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,091
|
||||
| 02.08.2026, 15:07 | ||||
|
Но со временем это начало мешать, поэтому сейчас и экспериментируют с другой архитектурой. На настоящий момент - экспериментируют. Выпиливать OpenGL никто не собирается. С Вулканом я дела не имел (именно потому что для моих скромных задач он излишне сложный), но сильно подозреваю, что там точно такое же C-API. Как и во всех нормальных библиотеках.
1
|
||||
|
392 / 337 / 66
Регистрация: 14.10.2014
Сообщений: 1,538
|
|
| 02.08.2026, 17:37 | |
|
steevis, не пойму - а зачем использовать .dll и .a одновременно? Или одно для винды, а другое для линуксов?
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2021
Сообщений: 38
|
|
| 02.08.2026, 17:51 [ТС] | |
|
При линковке с помощью GCC под линухом можно сразу указать файл динамической библиотеки .so. В наших линуксовых сборках создаются только они. При этом статическая не нужна, линковщик подцепит все сам автоматом. При работе с MinGW под виндой одновременно с .dll нужно создать мелкий .a, который содержит информацию об импорте-экспорте. Это касается библиотек wxwidgets и common.
Статическая либа engine.a нужна, чтобы высвечивать как можно меньше ценного расчетного функционала и хитростей его реализации. Есть минимально необходимый API и все.
0
|
|
| 02.08.2026, 17:58 | |||
|
Для UI - тем более. С wxWidgets работал лишь в одном проекте, и то "вскользь", поэтому на примере Qt. Приложение крутит событийный цикл объекта QApplication, который везде доступен через глобальную переменную qApp. Статическая линковка означает что этот объект будет в плагине, работать с хостом это конечно не будет. Нужно линковать динамически, причем указать Qt что она используется из плагина, такая опция есть (во всяком случае была). Если же Вы придаете слову "статический" какой-то другой смысл, то извольте пояснить какой, иначе ответить Вам просто нечего. Какие проблемы с нормальной, динамической линовкой? Не по теме:
0
|
|||
| 02.08.2026, 17:58 | |
|
Word automation + Windows server 2008 R2 = тормоза(очень сильные тормоза)
Напишите пожалуйста программу. Не очень сильно разбираюсь в c++ и именно в структур. Сейчас только все осваиваю Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах! Безумно очень очень нуждаюсь в вашем содействии! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|