$381.49


$23.35


$28.91


Теория плагинов

Выбираю все dll из каталога с программой,
загружаю каждую и пытаюсь найти в ней функцию (через api getprocaddress)
с заранее определенным жестко именем (например что нибудь типа isplugin formystuff).

Если нашлась — dll считается моим плагином, если нет — выгрузить и забыть.

А набор вызываемых функций по идее одинаков у всех плагинов,
и программа (основная) в курсе какие именно функции она ищет в dll.

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


--------------------------------------------------------------------------------
...
type

// Процедурные типы для хранения ссылок на функции плагинов
tgetnproc=function:shortstring;
tgetsproc=function:integer;
tprocessproc=procedure(config:pointer; request:prequest; var reply:preply);
tconfigproc=procedure(defcfg:psysconfig; var config: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.create;
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);

 

Интересное

Синтетическое резервное...
Количество данных на предприятиях, больших и малых, с годами растет в геометрической прогрессии. Защита данных становится очень сложной задачей, а требования доступности растут с каждым днем....
Подробнее...
Комплексное продвижение...
В этой статье мы остановимся на положительных сторонах каждого отдельного этапа, а так же определим положительные и отрицательные стороны комплексного подхода при продвижении сайта, т.е....
Подробнее...
Руководство по TCP/IP для...
Большинство из нас знает TCP/IP как «клей», связующий Internet. Но не многие способны дать убедительное описание того, что этот протокол представляет собой и как работает. Итак, что же такое...
Подробнее...
Уменьшение Windows XP
Я обратил внимание, что Windows XP занимает очень много места на винчестере. Причем этот размер постоянно увеличивается. Не хотелось бы только из-за этого покупать новый жесткий диск.Чтобы...
Подробнее...
Интернет в розетке
Многие наверняка слышали о возможности подключению к интернету через обыкновенную бытовую электросеть. Эта технология обладает тем важнейшим преимуществом, что электросеть куда более развита и...
Подробнее...
Копирование и удаление...
Попробуем осуществить копирование файла по частям. Узнаем о том, как удалять непустые каталоги с подкаталогами, а так же еще много полезной информации.В самом простом случае вопрос копирования...
Подробнее...
Настройка Web...
Данное решение также может быть адресовано владельцам небольших беспроводных сетей, предоставляющим платную услугу использования Internet для мобильных абонентов. В интернет-кафе ставка обычно...
Подробнее...
Стратегии высокой надежности
Большинство предприятий среднего и большого бизнеса сегодня очень сильно зависят от своих компьютерных сетей. Многие предприятия также имеют приложения, которые являются ключевыми для задач...
Подробнее...
Увеличение скорости...
Когда вы соединяетесь с web-узлом, компьютер обменивается с ним информацией. Часть этой информации связана с выяснением IP-адреса узла. Фактически, протокол TCP/IP имеет дело не словами. Каждому...
Подробнее...
Социальная инженерия
Что такое социальная инженерия?? Многие задают себе этот вопрос.Одни думают что это какая то новая точная наука наподобоие математики или физики. А нет!!!!Это искусство ведения разговора и...
Подробнее...