|
|
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Собственно сабж. Как реализовать поддержку плагинов в своей программе, какова вообще "технология" написания такого рода программ и самих плагинов. У кого какие идеи? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 15:47:13 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
первое что пришло в голову: наборы регистрируемых колбэков. 4 8 15 16 23 42 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 17:47:36 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
На сегодня есть три основных подхода: - динамические библиотеки с жестко заданными именами экспортируемых функций Пример: FAR, TotalCommander - динамические библиотеки с классами реализующими несколько жестко определенных интерфейсных методов которые в свою очередь описывают реальные функции. Например: ActiveX, Qt. - встраивание в основную программу транслятор с какого-нибудь языка. Пример: MS Office, Emacs, MathLab. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2009, 21:22:08 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Т.е как я понял, основной способ - это включить в библиотеку набор заранее известных функций, независимо от того, как они будут, просто в куче, или обёрнуты в классы. А можно поподробней про регистрируемые колбэки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 07:29:33 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Если по простому: Делаешь 3 функции: InitPlugin, FreePlugin, GetInterface. Эти функции должны поддерживаться всеми плагинами. В Init/Free делаешь что хочешь, в GetInterface возвращаешь структуру, известную основному приложению: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В плагине: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. В проге: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 12:20:32 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Прежде всего стоит понять, что плагин сам по себе не существует. Для того, чтобы он выполнял что-то полезное нужна полноценая интегрирация с приложением-хостом. Другими словами, на одних коллбэках далеко не уедешь. Понадобилось, к примеру, вашему плагину вывести какой-нибудь текст в статусную строку приложения. Как это осуществить? Конечно, можно на каждый чих делать коллбэк и по любому поводу опрашивать все плагины "а не хочешь ли ты мне что-нибудь сказать-показать?", но это тупиковый путь. Правильно будет все провернуть следующим образом: приложение-хост само по себе состоит из набора "сервисов", доступных извне. Этими сервисами и будут пользоваться плагины. Приложение, таким образом, ничего о плагинах знать не будет (соблюдаем Open-Closed Principle). А в случае возникновения каких-то событий приложение будет публиковать уведомления с использованием обобщенного агрегатора событий. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 13:15:09 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Приложение, таким образом, ничего о плагинах знать не будет (соблюдаем Open-Closed Principle). Мне кажется приложение наоборот должно знать о плагине, например, делаю я сейчас какую либо систему, которая работает с базой данных, изначально система работает только с Postgres, а если я захотел добавить поддержку скажем Oracle, тогда послее загрузки плагина, моя система должна знать о нём, т.е она должна знать, что теперь может располагать свои данные в базе Oracle... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 14:36:21 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
I dont knowМне кажется приложение наоборот должно знать о плагине, например, делаю я сейчас какую либо систему, которая работает с базой данных, изначально система работает только с Postgres, а если я захотел добавить поддержку скажем Oracle, тогда послее загрузки плагина, моя система должна знать о нём, т.е она должна знать, что теперь может располагать свои данные в базе Oracle... Скажем так: максимум, что приложение должно знать о плагине -- это то, что он есть. Плюс, возможно, оно может давать пользователю возможность выбрать, какой плагин использовать. В дальнейшем же приложение работает с соответсвующим IDatabasePlugin и больше ничего его не интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2009, 16:44:34 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
http://www.codeplex.com/MEF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 00:07:11 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Скажем так: максимум, что приложение должно знать о плагине -- это то, что он есть. Плюс, возможно, оно может давать пользователю возможность выбрать, какой плагин использовать. В дальнейшем же приложение работает с соответсвующим IDatabasePlugin и больше ничего его не интересует. хм... логично... Немного по коду: Код: plaintext 1. 2. 3. 4. 5. Что должен будет возвращать такой сервис-провайдер? Доступ к какой-либо части программы? например указатель на Toolbar или указатель на какую либо функцию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 08:09:18 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
I dont knowЧто должен будет возвращать такой сервис-провайдер? Доступ к какой-либо части программы? например указатель на Toolbar или указатель на какую либо функцию... Ссылку/указатель (зависит от терминологии) на строго определенный интерфейс. В примере с Toolbar'ом -- это будет не указатель на объект приложения Toolbar, а некий интерфейс IToolbarManagerService, предоставляющий API по работе с этой самой панелью инструментов. Это сделано потому, что класс Toolbar -- деталь реализации приложения; класс может поменяться (или вовсе исчезнуть -- например, с заменой на Ribbon) в последующих версиях и его использование внесет в плагин зависимость на библиотеку для разработки UI. И да, в случае .NET проще всего использовать упомянутый MEF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 13:29:38 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Не, как раз всё на С/С++ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 14:10:41 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Ну тогда либо использовать COM (если Windows), либо изобретать свой аналог оного, более легковесный. Сама идея остается без изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 14:14:44 |
|
||
|
как пишутся приложения с плагинами?
|
|||
|---|---|---|---|
|
#18+
Тут изначально под Linux приложение в виде демона(может быть потом портирую на Win), а к нему уже пользователи подключаться будут, через клиентскую прогу(и будут с этим демоном командами обмениваться). К этому приложению система плагинов и нужна, малоли чего потом пользователям захочется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2009, 14:26:54 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36168054&tid=1344297]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
226ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 574ms |

| 0 / 0 |
