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


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


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


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

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

 

Интересное

Создание таблиц Excel на PHP
Excel - ом пользуются те, кто работает с финансами и деньгами. Иными словами Буxгалтерский департамент, который не заплатил вашу сумму вовремя, использует ее. Сделайте жизнь буxгалетеров легче и...
Подробнее...
Захват чужих имен
Особенности доменных имен, уже бывших в чей-то собственностиНе знаю, как вам, но мне иногда кажется, что все лучшие доменные имена уже разобрали. Не раз я придумывал потрясающее доменное имя, и...
Подробнее...
Скрытые опасности сетей Wi-Fi
Нет никаких свидетельств того, что беспроводное интернет-содинение негативно влияет на здоровье людей, говорят ученые.Авторы документальной телепрограммы Би-би-си «Панорама» выяснили,...
Подробнее...
Печать из Linux на Windows...
1. Предисловие Перед нами стоит задача печати документов на Win-принтере (Canon LBP — 810) из Linux (ALT Master 2.2/2.4). Canon LBP — 810 подключен (USB-подключение) и настроен на Win-компьютере...
Подробнее...
Миф о QoS
Нет ни одного человека, который бы хоть раз не прочитал какой-нибудь FAQ по Windows XP. А раз так, то каждый знает, что есть такая вредная служба Quality of Service — сокращенно QoS. При...
Подробнее...

Продукт "1С: Бухгалтерия 8 КОРП". Что это такое и для чего он нужен? Бухгалтера строго соблюдают порядок ведения хозяйственной деятельности предприятия. Прошли времена, когда нелегкий труд...
Подробнее...
10 полезных возможностей...
В состав операционной системы Windows Vista вошло антишпионское приложение «Защитник Windows» (Windows Defender), предназначенное для защиты от вредоносного ПО и сбора информации о пользователях и...
Подробнее...
10 фактов, которые нужно...
Технология усиления служб (service hardening) — один из множества новейших механизмов обеспечения безопасности Windows Vista и нового поколения серверов Windows, известных как Longhorn Server....
Подробнее...
Требования к CMS в эпоху...
По поводу перспектив Веб 2.0 существует множество мнений и часто диаметрально противоположных, однако едва ли кто-либо станет спорить с тем, что эта концепция заметно сказалась на современном...
Подробнее...
БИЗНЕС В ИНЕТРНЕТЕ
Интернет — один из самых молодых на данный момент рекламоносителей. Преимущественная особенность интернет-рекламы состоит в легком воздействии на определенные узкие целевые аудитории, что просто...
Подробнее...