LINUX.ORG.RU

Литература по написанию приложений с поддержкой плагинов (полноценной)


0

3

Ищу литературу, где разжевываются принципы работы всяких штук с плагинами. Полноценная взаимосвязь, проектировка архитктуры. Язык - C++. Очень желательно, чтобы это было связано с Qt (там свои специфики есть для плагинов), и желательно на русском. Приветствуются живые примеры с хорошим кодом, где легко разобраться. В примеры Qt Смотрел, там только хеллоуворлды без пояснения более сложной $SALT.

Есть довольно интересная книжка про создание архитектуры IDE с упором на расширяемость и поддержку плагинов. Правда язык C# и естественно никаких qt. Зато написана книга по большой реально существующей и работающей IDE. Надо ссыль?

gizzka ★★
()
Ответ на: комментарий от no-dashi

Как же не нужно, dlsym еще.

Да и речь вроде шла об архитектурном уровне

yoghurt ★★★★★
()

>Приветствуются живые примеры с хорошим кодом, где легко разобраться.
leechcraft
//сбежал из треда

x3al ★★★★★
()

>с поддержкой плагинов

Не нужно. Правильный способ организации расширяемой системы: предоставить внешним процессам доступ к возможностям ядра программы через стандартные механизмы обмена данными: пайпы, сокеты. man fvwm как пример.

geekless ★★
()
Ответ на: комментарий от geekless

Мне почему то кажется, что это будет несколько медленнее чем работа в общем адресном пространстве — я не прав?

fat_angel ★★★★★
()
Ответ на: комментарий от geekless

редоставить внешним процессам доступ к возможностям ядра программы через стандартные механизмы обмена данными: пайпы, сокеты. man fvwm как пример.

А если это гуй? Тогда просто обвешать костылями, ага. Я про so-библиотеке в роли плагинов подразумевал в теме.

flareguner
() автор топика
Ответ на: комментарий от flareguner

А что гуй? Я вон гуёвое приложение и привел в пример.

geekless ★★
()

и желательно на русском


нет пути

anonymous
()
Ответ на: комментарий от geekless

Правильный способ организации расширяемой системы: предоставить внешним процессам доступ к возможностям ядра программы через стандартные механизмы обмена данными: пайпы, сокеты.

Конечно это единственный правильный способ во всех возможных случаях. Гонять гигабайты данных и увеличивать объём потребляемой памяти в разы - это всё ерунда, процессоры и память дёшевы.

Begemoth ★★★★★
()
Ответ на: комментарий от geekless

Если бы всё делалось из соображений производительности, писали бы до сих пор на асме.

4.2

Begemoth ★★★★★
()
Ответ на: комментарий от no-dashi

Знаешь, везде пишут как подключить плагин, какой код нужно писать. А как организовать архитектуру приложения так чтобы туда плагины вписались без затыков и говнокода - так хрен найдешь ведь.

anonymous
()

смотри исходники QtCreator

anonymous
()

Так получилось, что я некоторое время работал в проекте, который очень похож на твоё описание — язык С++, Qt, использовал плагины. Он был достаточно большой и к концу моей работы в нём, для него существовало больше десяти различных плагинов.

Архитектура там была такая — сравнительно небольшое ядро программы загружает все библиотечки из заданной папки и выполняет единственную функцию (что-то типа IUnknown * GetObject()). Этот IUnknown — это слизанный с ms COM интерфейс (он там также и называется). Далее из этого интерфейса получаем нужную функциональность.

Такой подход мне показался очень удобным — прекрасно масштабируется.

Вот накидал по памяти примерчик. В архиве уже есть бинарники под x64 если чё, только перед запуском надо export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. в консоли прописать, запускать файл ./hello :) Экзешник «core» там лишний, но влом перезаливать))

mors
()
Ответ на: комментарий от flareguner

Что такое GetObjectFunc?

typedef IUnknown* (*GetObjectFunc)();

Указатель на функцию, возвращающую объект, реализованный в плагине.

Хидеры читать не учили?

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Упс, невнимательный я. Думал это что-нибудь типа WinAPI

flareguner
() автор топика
Ответ на: комментарий от flareguner

Пожалуйста :)

Чисто в теории этот же код должен заработать и под windows, надо только загрузку *.so заменить на *.dll

LD_LIBRARY_PATH надо менять потому что в qt нет возможности указать полный путь к библиотеке — он по названию пытается найти библиотеку во всех путях перечисленных в LD_LIBRARY_PATH и /etc/ld.so.conf

mors
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.