![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Интересно.
Но все-таки как реализовать обмен чем-либо мужду плагином и ядром? Каким образом? Если сообщения не удобны. Последний раз редактировалось Человек_Борща; 10.05.2011 в 23:00. |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Ты спросил общий вопрос - я дал общий ответ.
Хочешь услышать что-то конкретное - конкретно скажи, что тебя интересует. Повторю ещё раз в общих словах: у ядра на руках есть интерфейсы плагинов (IHLRPlugin), а у плагина на руках есть интерфейс ядра (IHLRCore). Когда кому-то из них нужно что-то от другой стороны - они вызывают метод другой стороны. К примеру, если плагину нужно что-то от ядра - он вызывает метод, скажем, IHLRCore.GetSomeData. GetSomeData возвращает данные, которые запросил плагин. Если ядру что-то надо от плагина, оно вызывает метод, скажем, IHLRPlugin.GetSomeOtherUsefulData. Я не могу тебе сказать конкретный пример, потому что ты ничего не говоришь про то, какие данные ты собрался передавать. Поэтому я могу сказать только такие общие слова. Тут главное не забывать, что мы работаем на интерфейсах. И не умудриться при этом свалить всё в кучу.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
т.е. то общение которое я хочу уже представлено на примере, когда IHLCore запрашивает данные у плагина ввиде:
Код:
|
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() ![]() В демке: передача данных от плагина к ядру по команде ядра выглядит так: Код:
Код:
Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#15 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Вот теперь понятнее =)
Пойду разбираться... |
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Разобрался с кодом:
IHLrCore - базовый интерфейс который реализует отдачу всяческой базовой фигни(типа версии и т.д. и т.п.) IHLRPlugin - интерфейс реализующий плагин и его способ общения с программой. THLRPlugin - класс хранения данных об одном обьекте(1 плагин). THLRPlugins - контейнер обьектов THLRPlugin. Далее по поводу меню. Я создал такой интерфейс: Код:
Далее где мне реализовать его дальше? Надо ли делать в THLRPlugin такую вещь: Код:
|
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
IHLRMenu однозначно должна реализовывать форма, меню которой ты собрался управлять с помощью этого интерфейса:
Код:
Ну, остаётся только в FormCreate установить Self (т.е. форму) в это новое свойство менеджера плагинов. Ну а плагин спокойно сможет использовать IHLRMenu: Код:
P.S. Не забываем про WideString и safecall. Также, рекомендую идентифицировать всё по GUID, либо вести в самой программе учёт: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#18 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Код:
Код:
|
|
![]() |
![]() |
![]() |
#19 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
Мне казалось, ты ввводишь IHLRMenu, чтобы плагин мог добавлять и убирать пункты в меню своей программы. Не, для определённых хитрых целей такое сделать можно. Но в общем случае - не нужно. Один общий IHLRMenu - достаточно. Цитата:
Код:
Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
||
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Ок, можно и так. Я видимо по прежнему далёк от этой темы,что огорчает.
Похоже я не понимаю как реализовать простую иерархию в данной системе. Set|GetMenu реализовал вот так: Код:
При запуске программы, осыпаемся вот с таким текстом: Код:
Последний раз редактировалось Человек_Борща; 11.05.2011 в 23:54. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подключение интерфейсов к 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 |