![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Всем доброго времени суток!
Итак давно хочу нреализовть систему плагинов. Опыта в подобном плане нет. А реализовать хочется. Нашёл пару статей: 1 2 Но хотелось бы чуть подробнее... опыта в этом плане практически нету. К каким данным предостовлять доступ в программе? Как правильно создавать интервейс в главной программе и что давать разработчикам плагинов? В общем по подробнее обо все об этом=) Если конкретно то: Что такое интерфейсы? Как их создавать? Как работать с ними? Как организовать правильную работу Главного приложения и работу плагина подключсченного к приложению по средству интерфейса? Что давать раработчикам плагинов? К каким данным в основной программе нужно предоставлять доступ из плагина? Так же былобы совсем не плохо хотябы пару простых исходников на эту тему. Ну и вопрос о том есть ли что-то более лучшее чем интерфейсы? Так сказать, дайтте пищу для ума ![]() Последний раз редактировалось Человек_Борща; 08.05.2011 в 02:30. |
![]() |
![]() |
![]() |
#2 | ||||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Тут собраны ссылки на статьи по плагинам (саму серию читать не рекомендую - это скорее заныр под капот, чем реализация плагинов; хотя на итоговый пример посмотреть можно).
В частности, там есть ссылки на материал по интерфейсам: http://www.delphikingdom.ru/asp/view...catalogid=1183 http://www.delphikingdom.ru/asp/view...catalogid=1113 http://www.delphikingdom.ru/asp/view...catalogid=1115 Цитата:
Проще всего предоставить к минимуму (можно вообще - к нулю) и попробовать написать несколько полезных плагинов. Наверняка столкнёшься с тем, что данных не хватает. Вот - надо их предоставить. Цитата:
Код:
1. Не использовать типы данных Delphi, а только системные (меж-языковые). 2. Использовать safecall. Цитата:
А вообще - см. ссылки выше. Цитата:
На практике же: интерфейсы и COM - это наиболее удачные методы реализации системы плагинов.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
||||
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Допустим написал такой код:
Код:
![]() Теперь проблема. Как прикрепить его к программе? У меня в проекте ListBox и Label при создании главной формы планируется загружать плагины. Значение возвращенные function GetPluginName:string;заносится именем в listBox При выборе элемента Listbox планируется в label значение function GetPluginDesc:string;. Как это организовать? |
![]() |
![]() |
![]() |
#4 | ||||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
||||
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Подключил. Далее сделал так: Код:
это я знаю. Цитата:
Код:
|
||
![]() |
![]() |
![]() |
#6 | |||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
WideString. В системе это BSTR.
Цитата:
Цитата:
Цитата:
Ты статьи читал/примеры смотрел?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|||
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Написал кое-как проект. НЕмогу понять почему ошибки в конструкторах и деструкторах. Помогите найти причину багов и поставьте меня на путь истенный=)
Заранее благодарен! |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
http://dl.dropbox.com/u/201788/Proje...luginsDemo.rar
В проекте плагина добавь ".." (без кавычек) в Search Path.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось GunSmoker; 10.05.2011 в 22:33. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Интересная реализация много нового для себя открыл.
Как реализовать механизм общения плагин-интерфейс <> сервер-интерфейс? Как это должно выглядеть(Не кодом). Есть идея с сендмессаждами но какой тип данных там будет нужен? Последний раз редактировалось Человек_Борща; 10.05.2011 в 20:27. |
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
В этой реализации при инициализации плагина ему передаётся IHLRCore - это и есть интерфейс сервера (хоста/приложения). Сейчас он пустой, да. Но в реальной программе там будут методы, реализующие услуги, которые предоставляются плагинам.
Конечно же, не нужно пихать ВСЁ в один интерфейс. Сам IHLRCore должен реализовывать лишь базовые вещи - вроде возврата версии ядра, списка плигинов и т.п. Если надо, к примеру, дать плагинам доступ к главному меню программы, то это должен быть новый интерфейс IHLRMenu. Который, кстати, должен реализовываться главной формой, а в менеджер плагинов ты его передашь при создании формы (FormCreate) и снимешь после выгрузки плагинов (FormDestroy). И так далее. Цитата:
Из обмена сообщениями следуют: 1. Проблема упаковки параметров запроса и распаковки результата. 2. Неудобно проверять на ошибки.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подключение интерфейсов к DLL | DENISLED | Помощь студентам | 2 | 02.04.2011 21:22 |
Подключение интерфейсов к DLL(написаном на WinAPI) | DENISLED | Win Api | 1 | 02.04.2011 19:34 |
Плагины через dll | Lime | Общие вопросы Delphi | 7 | 17.06.2010 20:50 |
Переделать ввиде меню! | raspberry | Общие вопросы C/C++ | 0 | 05.04.2010 23:33 |
микшер на два потока в проигрывателе музыки. проигрыватель сделан на основе библиотеки Bass.dll | D-fens | Мультимедиа в Delphi | 4 | 08.06.2007 20:36 |