Как работать с плагинами ?
Я сделал так - выбираю все 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 thenbegin ShowMessage('Hе найдено подключаемых модулей.'); Close; end; repeat lib:=LoadLibrary(PChar(sr.Name)); if lib<>0 thenbegin @pgetn:=GetProcAddress(lib, 'GetPluginName'); if @pgetn=nil then FreeLibrary(lib) // Hе плагин elsebegin 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); ...
Мониторинг сетей в Delphi
В этой статье мы рассмотрим некоторые функции, которые предоставят нам возможность контроля локальной сети. Так как материал довольно обширный, я не буду пускаться в отвлеченные рассуждения, и буду давать только самую суть.
Мир 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)
В Логан Каунти в штате Колорадо (США) считается преступлением целовать женщину, пока она спит.
В Коннектикуте (США) запрещается выбрасывать использованные бритвы. В этом же штате никто, кроме слепых, не может ходить с белой тростью.
И на закуску коротенький анекдот
Хмурое утро, жена выгоняет интернетчика погулять с собакой... Он долго бродит с ней, потом поднимает палку, кидает её и командует: - Э-э-э, Яндекс!!! То есть, Рамблер!!! Тьфу, апорт!!!