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


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


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


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

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

 

Интересное

Трюки и спецэффекты в...
В наше время при помощи PhotoShop реализовывается множество различных проектов и задач, но основными являются несомненно те, которые связаны с созданием собственных изображений и визуальной...
Подробнее...
Firefox: Настройка RSS
Много слышал об RSS и даже несколько раз пытался пользоваться специальными программами для чтения. Но устанавливать дополнительное ПО не хочется, тем более что в Firefox есть встроенный клиент...
Подробнее...
Введение в протокол UDP
UDP (User Datagram Protocol, Протокол дейтаграмм пользователя) предназначен для обмена дейтаграммами между процессами компьютеров, входящих в единую сеть с коммутацией пакетов. В качестве...
Подробнее...
Smarty – не просто шаблоны
Скажем сразу, этот материал не будет вас учить пользоваться базовыми возможностями данной библиотеки. Напротив, я копну гораздо глубже. Цель этого материала взглянуть на шаблонизатор Smarty с...
Подробнее...
Проблемы программы...
Illustrator — странная программа, она не похожа на другие продукты Adobe. Порой складывается впечатление, что ее выпускает не Adobe столько проблем она делает. С самой первой из них пользователь...
Подробнее...
Как выбрать телефон
На сегодняшний день на рынке имеется неограниченное число видов моделей мобильных телефонов, от самых простых, до моделей, имеющих бесчисленное количество функций, и возможностей деловым людям.
Подробнее...
Полезные функции для...
Эта статья фактически краткий справочник по функциям для работы с файлами.Описываемые функции редко кто использует, но это не значит, что они бесполезны.Напротив, они очень даже полезны... Но они...
Подробнее...
Обновление контроллеров...
АннотацияВ статье рассматриваются обновления контроллеров домена Windows 2000 до Windows Server 2003 и добавления контроллеров домена под управлением Windows Server 2003 в домен Windows...
Подробнее...
10 вещей, которые...
«Виртуализация» — самое употребляемое в последние годы слово в IT-сообществе. И в преддверии выпуска Windows Server 2008, который запланирован на 1-е марта, его употребляют всё чаще и чаще....
Подробнее...
Выделенный сервер
Вас интересует вопрос, что такое выделенный сервер(Dedicated Server) и для чего он нужен.Этот хостинг, который предоставляет клиенту в полное пользование отдельным выделенным сервером. Есть...
Подробнее...