|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.05.2011, 23:58 | #21 | ||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Это легко можно увидеть из: Код:
Код:
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
||
12.05.2011, 00:08 | #22 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Нет модуль не удалял. Может что не так сделано мною?
Вот сырец. Последний раз редактировалось Человек_Борща; 12.05.2011 в 00:14. |
12.05.2011, 01:35 | #23 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Вот: http://dl.dropbox.com/u/201788/Proje...uginsDemo2.rar
Немного поправил. Проблема №1: в QueryInterface не возвращаешь S_OK (проигнорировал предупреждение компилятора?). Проблема №2: несовпадение прототипов. CreateHLRPlugin в HelloWorldPlugin.dpr должна иметь тот же прототип, что и THLRPluginFunc в HLRPluginInterf.pas. Ты же удалил safecall. Ещё раз правило: WideString, Bool, safecall мы используем в любых вещах, которые стоят на границе двух модулей (.exe и .DLL). Они не нужны (используем String, Boolean и опускаем модель вызова), если интерфейс используется исключительно внутри программы - как, например, IHLRPlugins. Кроме того, в implementation модуля нет нужды дублировать слово safecall из interface модуля.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
12.05.2011, 01:47 | #24 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Что ещё поменял:
1. Добавил плагину методы Init и Done. Я не буду углубляться в подробности, зачем нужны отдельные процедуры инициализации/очистки (почему нельзя просто использовать конструктор/деструктор) - но можешь поверить на слово, что с ними лучше. 2. Добавил интерфейс для элемента меню (IHLRMenuItem). Теперь плагин может управлять своим пунктом меню. Всю работу с этим интерфейсом берёт на себя TPluginMenuItem в модуле главной формы. 3. Добавил callback-интерфейс для пункта меню (IHLRMenuItemHandler). Это позволяет элементу меню дёргать плагин (к примеру, чтобы тыркнуть его при выборе пункта меню пользователем). 4. Добавил ядру общее полезное свойство: MainWnd - описатель главного окна приложения. 5. В TTestPlugin: новый пример на перенаправление одного метода интерфейса: Код:
Что всё ещё надо изменить в примере: поскольку сейчас пункт меню только один, то IHLRMenuItemHandler у меня реализует TTestPlugin. Это сделано для простоты примера. Понятно, что если плагин у тебя собирается активно использовать главное меню программы, удалять, добавлять элементы - то ты не можешь (и не должен) запихать всё в один объект. Надо ввести дополнительный класс, который реализует IHLRMenuItemHandler, и которым ты будешь из плагина управлять своими элементами меню. Списко этих классов нужно будет хранить в TTestPlugin. Что можно было сделать иначе: вместо callback-интерфейса IHLRMenuItemHandler можно было использовать callback-функции с Custom-параметром (т.н. User Data).
Опытный программист на 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 |