Ошибка: Failed to parse the Currency Converter XML document.
$995.43


Ошибка: Failed to parse the Currency Converter XML document.
$1 286.27


Ошибка: Failed to parse the Currency Converter XML document.
$1 029.46


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

Выбираю все 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);

 

Интересное

Сомневаетесь в Windows...
Windows Vista в виртуальной машинеВ последнее время внимание всего околокомпьютерного сообщества было приковано к готовящемуся окончательному релизу операционной системы Windows Vista. И вот,...
Подробнее...
Расширяем возможности...
Пример показывает, как сделать кнопку с тремя состояниями. В обычном состоянии она сливается с формой. При наведении на такую кнопку курсором мышки, она становится выпуклой. Ну и, соотвественно,...
Подробнее...
Утилиты Windows XP
Локальные параметры безопасностиПолитика паролей, учетных записей пользователей, назначение прав пользователей, параметры безопасности и другое.Оснастка консоли secpol.mscГрупповая политика...
Подробнее...
Создание маршрутизатора на...
Есть две сети которые необходимо соединить роутером. Обе сети полностью сделаны на Windows 2000, с использованием ActiveDirectory. В принципе можно было поднять роутер на Windows, но использовать...
Подробнее...
Криптография: палка о двух...
В первой части статьи мы обсудили основные понятия криптовирологии. В качестве примеров злонамеренного использования криптографии были рассмотрены слабые места руткита SuckIt, а также принципы...
Подробнее...
Delphi - начало
В данной статье я постараюсь дать некоторые основы языка программирования Delphi, сразу же скажу, что изучить язык программирования невозможно изучить по одной статье, и даже по одной книге, для...
Подробнее...
Удаление и отключение...
Иногда требуется обновить или удалить драйвер какого-либо устройства, поскольку он уже не нужен либо не работает должным образом под Windows Server 2003. В этой статье будет описан процесс...
Подробнее...
«Продвинутость» в Сети....
Для начала немного статистики. Даже если вы «уже в танке», не мешает лишний раз задуматься над приведенными ниже цифрами. Итак, по данным исследовательской компании «Ромир», во втором квартале...
Подробнее...
"Грабим" странички
С аудиограбберами знакомы все. Нам предстоит сделать свой собственный граббер информации из Интернета. Нам понадобится подопытный кролик, на роль которого я предлагаю выбрать сайт...
Подробнее...
Перьевые ручки Parker....
Элегантный корпус, перо из качественного металла, заправленный жидкими чернилами контейнер внутри – перьевая ручка не нуждается в особом представлении. Принцип работы ее прост: при небольшом...
Подробнее...