Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 12.09.04 09:18

Лучшее из нашего FAQ   |x|
Как работать с плагинами ?
Я сделал так - выбираю все DLL из каталога с программой, загружаю каждую и пытаюсь найти в ней функцию (через API GetProcAddress) с заранее определенным жестко именем (например что нибудь типа IsPluginForMyStuff). Если нашлась - DLL считается моим плагином, если нет - выгрузить и забыть.

А набор вызываемых функций по идее одинаков у всех плагинов, и программа (основная) в курсе какие именно функции она ищет в DLL. Если даже и не так, то ничего не мешает тебе определить в плагине функцию наподобие GetFeatures, возвращающую список строк-названий поддержанных плагином процедур.

Вот часть моего кода по работе с плагинами...

...
type
// Процедурные типы для хранения ссылок на функции плагинов
TGetNProc=function:shortstring;
TGetSProc=function:integer;
TProcessProc=procedure(config:pointer; request:PRequest; var reply:PReply);
TConfigProc=procedure(defcfg:PSysConfig; var c onfig:pointer);
TSaveLoadProc=procedure(inifile:pointer; var config:pointer);

// Информация об отдельном плагине
TPlugin=record
Name:shortstring; // Полное название
Filename:shortstring; // Имя файла
Handle:integer; // Хэндл загруженной DLL
CFGSize:integer; // Размер конфигурации в RAM
ProcessProc: TProcessProc; // Адрес процедуры обработки
ConfigProc: TConfigProc; // Адрес процедуры настройки
LoadCFG,SaveCFG:TSaveLoadProc; // Адреса процедур чтения/записи cfg
end;
PPlugin=^TPlugin;

// Список загруженных плагинов
TPlugins=class(TList);

...

var
Plugins:TPlugins; sr:TSearchRec; lib:integer;
pgetn:TGetNProc; pgets: TGetSProc; plugin:PPlugin;

...

// Чита ем плагины и создаем их список.
Plugins:=TPlugins.Cre! ate;
if FindFirst('*.dll',faAnyFile,sr)<>0 then begin
ShowMessage('Hе найдено подключаемых модулей.');
Close;
end;
repeat
lib:=LoadLibrary(PChar(sr.Name));
if lib<>0 then begin
@pgetn:=GetProcAddress(lib, 'GetPluginName');
if @pgetn=nil then FreeLibrary(lib) // Hе плагин
else begin
New(plugin);
@pgets:=GetProcAddress(lib, 'GetCFGSize');
plugin.Name:=pgetn;
plugin.Filename:=sr.Name;
plugin.CFGSize:=pgets;
plugin.Handle:=lib;
plugin.ConfigProc:=GetProcAddress(lib, 'Configure');
plugin.ProcessProc:=GetProcAddress(lib, 'Process');
plugin.SaveCFG:=GetProcAddress(lib, 'SaveCFG');
plugin.LoadCFG:=GetProcAddress(lib, 'LoadCFG');
Plugins.Add(plugin);
end;
end;
until FindNext(sr)<>0;
FindClose(sr);
...

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
У нас большой выбор статей   |x|
Мониторинг сетей в Delphi
В этой статье мы рассмотрим некоторые функции, которые предоставят нам возможность контроля локальной сети. Так как материал довольно обширный, я не буду пускаться в отвлеченные рассуждения, и буду давать только самую суть.
Новинки книжного рынка   |x|
Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil (2-е издание) (с CD-ROM)
Успех 1-го издания этой книги (а для компьютерной книги, посвященной СУБД, это действительно был успех) обозначил потребности русскоязычных пользователей СУБД InterBase и Firebird, а также подтвердил слух о том, что InterBase - "серый кардинал" на рынке СУБД в России.
Первое издание было посвящено сразу 3 серверам СУБД - InterBase. Firebird и Yaffil. Однако за прошедшее с момента окончания работы над книгой время многое изменилось, и поэтому авторам книги пришлось значительно доработать книгу, в связи с чем и появилось ее второе издание.
В процессе работы над 2-м изданием было исправлено несколько сотен опечаток, внесена масса уточнений и дополнений. Очень сильно помогли читатели книги, которые присылали нам найденные ошибки и опечатки, а также задавали уточняющие вопросы.
Помимо исправлений и уточнений, книга дополнена главой по библиотеке InterBase Express (IBX), а также несколькими главами, посвященными последним версиям СУБД InterBase, Fireb ird и Yaffil.
Также к книге теперь прилагается компакт-диск, на котором содержится информация, необходимая каждому разработчику приложений баз данных InterBase/Fireburd/Yaffil:
- самые последние дистрибутивы серверов Interbase 7, Firebird 1.5 и Yaffil 1.0, а также Firebird 1.0.2.
- самые свежие дистрибутивы библиотек доступа для Delphi/C++Builder/Kylix, OLEDB, JDBC и ODBC-драйверы
- самые популярные средства администрирования и разработки приложений баз данных
- копии сайтов www.ibase.ru, www.interbase-world.com и ряда других, содержащих ценную и полезную информацию, включающую множество статей по использованию InterBase/Firebird/Yaffil, уникальных рекомендаций, тестов и интервью.
- копия архива сообщений самой активной конференции по InterBase/Fireburd/Yaffil, которая является уникальной базой знаний и сборником коллективного опыта по InterBase/Firebird/Yaffil.

Автор: Ковязин, Востриков
Опрос населения :)
Что мешает плохому танцору?
»»» Эти штуки... ;)
»»» Танцовщица
»»» Крылья
»»» Оппозиция
»»» Что и хорошему
»»» Ничего мне не мешает!
Для души

Хокку дня
Hынче опять у крыльца
Сидят старички-камикадзе
Вспоминают минувшие дни...

Афоризмы
Брак по расчету - проституция с постоянным клиентом.

Фраза дня
Уходя, гасите всех.

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Логан Каунти в штате Колорадо (США) считается преступлением целовать женщину, пока она спит.
В Коннектикуте (США) запрещается выбрасывать использованные бритвы. В этом же штате никто, кроме слепых, не может ходить с белой тростью.

И на закуску коротенький анекдот
Хмурое утро, жена выгоняет интернетчика погулять с собакой...
Он долго бродит с ней, потом поднимает палку, кидает её и командует:
- Э-э-э, Яндекс!!! То есть, Рамблер!!! Тьфу, апорт!!!

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=16275024


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.mdelphi
Отписаться

В избранное