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


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


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


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

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

 

Интересное

Установка IIS на Windows...
Internet Information Services (IIS) 6.0 – полнофункциональный веб-сервер, обеспечивающий основу для систем семейства Windows Server 2003, а также существующих веб-приложений и веб-служб XML. В IIS...
Подробнее...
Работа с ADO в Microsoft Excel
Достаточно часто требуется сформировать отчет и вывести его не только на печать, но и выгрузить в Excel. Последнего можно добиться 2 способами, либо получить данные средствами языка Navision C/Al...
Подробнее...
Использование программы...
Данная статья содержит сведения о бета-версии программного продукта корпорации Майкрософт. Информация в данной статье не является официальной и может быть изменена без предварительного...
Подробнее...
Система адресации в Интернете
Каждый человек, живущий на Земле, имеет адрес, по которому его в случае необходимости можно разыскать. Думаю, ни у кого не вызовет удивления то, что каждая работающая в Интернете машина также...
Подробнее...
Регистрируем простую...
Вам никогда не хотелось посмотреть, кто посещает вашу страницу ? Просто ради интереса или для статистики ? Или для ограничения доступа ? Если вы ответили да, хотя бы на один вопрос, то этот урок...
Подробнее...
Открытие XP Pro x64
Как энтузиаст новых технологий, я с нетерпением ждал возможности запустить на своем настольном компьютере Windows XP Professional x64 Edition. Недавно я собрал новую машину с процессором AMD...
Подробнее...
Безопасность в Windows XP
1. Стратегия безопасности Windows XP Модель безопасности Windows XP Professional основана на понятиях аутентификации и авторизации. При аутентификации проверяются идентификационные данные...
Подробнее...
10 советов по защите Wi-Fi...
Тема безопасности Wi-Fi соединения в наши дни очень популярна. На ряде форумов, ведутся энергичные дискуссии на предмет «лучшего решения». Один из наиболее часто обсуждаемых аспектов — большое...
Подробнее...
Поиск уязвимостей в PHP...
Итак, сейчас я Вам объясню, как я ищу баги в скриптах на PHP, так делаю я сам и не кому не навязываю свой вариант...Статья это маленькая, но я считаю полезная =)1. Если вы читали мою вторую статью...
Подробнее...
Перевод программ под Windows
Для перевода программ под windows используются редакторы ресурсов, которых развелось достаточно много. Самые лучшие, на мой взгляд, resurs hacker и restorator. У каждой из них есть свои плюсы и...
Подробнее...