...when altering one's mind becomes as easy as programming a computer, what does it mean to be human?..
9 февраля 2009 г.
Создаём систему плагинов, часть 11
К сожалению, из-за нехватки свободного времени у меня нет возможности закончить этот проект до конца. Поэтому я решил выложить то, что есть на текущий день. Возможно, кто-нибудь это возьмёт и доведёт до ума.
Вот исходники. Можете брать их и делать с ними всё, что только заходите (большая просьба: измените только константу ExportEntryPointName в IntfInit.pas на любую свою).
В архиве полные исходники и готовые исполняемые модули нескольких плагинов и сервера плагинов. Использовались D2007 и D2009. Исходники оставлены в том виде, в каком они были, когда я последний раз над ними работал. Не помню, компилируюся ли они вообще :) Но что-то близко рабочее там должно быть. Готовые модули собраны в полном отладочном режиме - вы можете диагностировать их работу с помощью DebugView.
P.S. Вот ещё один вариант реализации системы плагинов от меня с пояснениями и обсуждением (щёлкнуть по ссылке "Тема" в правом-верхнем углу). В этот раз - на DLL + интерфейсы.
18 комментариев :
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и (опционально) ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.
Жаль. :-( А так хотелось бы увидеть продолжение!
ОтветитьУдалитьОгромное спасибо автору !
ОтветитьУдалитьВот тут: http://forum.vingrad.ru/topic-240495.html
ОтветитьУдалитьесть ещё наработки по теме плагины в виде Delphi-ских bpl с интерфейсами (не bpl как DLL). Там ещё архив с примерами. Но это было до этой серии и вообще не тестировалось. Просто демонстрашка концепции.
Жаль что н закончил ведь тема важная и нужная...
ОтветитьУдалитьПланируется ли продолжение? Ждем :).
ОтветитьУдалитьСпасибо за Ваш труд.
Эх, вот такую бы статью да на C++ Builder.... Тема интересная, но информации по ней не так много, а жаль!!!
ОтветитьУдалитьК сожалению, я по нулям в C++ вообще и в C++ Builder в частности.
ОтветитьУдалитьПрисоединяюсь к alexander.netishin.
ОтветитьУдалитьЖдем продолжения... :).
Здравствуйте, Александр. У меня вопрос насчет передачи параметров в плагин, а точнее 17-ти строк.
ОтветитьУдалитьВ юните ExportPlugin создаю процедуру:
procedure ExportText(const Value1: WideString;const Value2: WideString;const Value3: WideString;const Value4: WideString; ....... const Value16: WideString;const Value17: WideString); safecall;
Но это явно что-то не то. Подскажите, пожалуйста, как лучше предавать эти строки? А также как вернуть данные из плагина в главное приложение после их обработки?
> Подскажите, пожалуйста, как лучше предавать эти строки?
ОтветитьУдалитьСмотря что вы хотите сделать.
> А также как вернуть данные из плагина в главное приложение после их обработки?
Смотря в каком виде у вас эти данные.
Необходимо создать поток в плагине и в этом потоке обрабатывать строковые данные полученные из главного приложения. В потоке будут выполнятся процедуры и функции компонентов Indy.
ОтветитьУдалитьЗатем после получения информации с сервера, передавать строковые данные в приложение.
Я не понимаю, с чем и почему у вас возникли сложности.
ОтветитьУдалитьВ плагине и ядре объявляете новый метод (или функцию - смотря по тому, пишите ли вы на интерфейсах или функциях), принимающий ровно одну строчку (WideString или PChar). В плагине вы её реализуете так: ставите элемент на обработку в очередь для потока и сразу же возвращаете управление. Когда поток закончит обработку, он вызовет функцию ядра, передав ей результаты. Как вы реализуете функцию ядра - зависит от того, что вы собираетесь делать с этими данными.
В любом случае, если у вас возникают такие вопросы, я рекомендую обратиться на форумы по программированию. Здесь не очень подходящее место для этого. Если есть вопросы/уточнения конкретно по циклу постов - тогда пожалуйста. А свои проблемы лучше решать в более подходящем месте.
здравствуйте. а есть трансляция этого крутанского блога в livejournal?
ОтветитьУдалитьНет, а надо?
ОтветитьУдалитьАлександр, спасибо за статью - она почти идеальна.
ОтветитьУдалитьА как начинающий программист: благодарю за исходники. Буду учиться.
Александр, можешь кратко описать какие вопросы отсальись не решенными в рамках этой серии статей?
ОтветитьУдалитьЭто будет, как план для довершения.
А я помню? :) Этой штуке года два.
ОтветитьУдалитьВ общем, серия получилась не столько про плагины, сколько про DLL и пакеты.
Так что "план для довершения", если это можно так назвать - разобрать собственно темы по плагинам. Способы передачи данных (динамических), обмен строками, обработка ошибок, формы в плагинах, callback-функции (плагин дёргает ядро и/или другой плагин). Всё это разжевать и на примерах.
Понятно, приводить хорошо бы в пример современные решения, а не методы пятнадцатилетней давности.
В цикле что-то частями упоминалось, но вскользь.
Долгожданное продолжение :)
ОтветитьУдалить