Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 11.04.04 09:05

Лучшее из нашего FAQ   |x|
Как работать с плагинами ?
Я сделал так - выбираю все DLL из каталога с программой, загружаю каждую и пытаюсь найти в ней функцию (через API GetProcAddress) с заранее определенным жестко именем (например что нибудь типа IsPluginForMyStuff). Если нашлась - DLL считается моим плагином, если нет - выгрузить и забыть.

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

Вот часть моего кода по работе с плагинами...

...
type
// Процедурные типы для хранения ссылок на функции плагинов
TGetNProc=function:shortstring;
TGetSProc=function:integer;
TProcessProc=procedure(config:pointer; request:PRequest; var reply:PReply);
TConfigProc=procedure(defcfg:PSysConfig; var c onfig: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.Cre! ate;
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);
...

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • компонент редактирования в стиле Object Inspector
    Может кто-то встречал Subj? Т.е. в левой части название, в правой значение, например Фамилия Иванов Имя ...
  • Тестирование USB
    Уважаемые. Кто-нибудь мне может внятно объяснить для чего нужен параметр IOCTL_USB_DIAGNOSTIC_MODE_ON для работы с USB....
  • Вращение спрайта ...
    Есть ли в DirectDraw процедура для аппаратного вращения изображения на IDirectDrawSurface? А то я полазил и в самой ...
  • -= Пишем ЧАТ, господа =-
    Занялся как-то написанием чата. Много уже написал, а основного не сделал. Как лучше подключать нескольких пользователей ...
  • Нестандартные курсоры
    Здравствуйте мастера, можно ли по вашему загрузить курсор из любого Bitmap. Пробовал LoadImage но .bmp не удалось ...
  • Звук
    Как средствами Delphi можно воспроизвести звук определенной частоты и длительности?
  • procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELE
    Я создал панель, у которой хочу чтоб было свойство MouseLeave, при создании компонента в VCL это легко делается а вод в ...
У нас большой выбор статей   |x|
Работа с COM-портами под Windows
Практически любому компьютеру приходится связываться с внешними устройствами. Практически любому программисту приходилось (приходится, придется) ваять программы под эти устройства. Огромное количество внешних устройств общаются с компьютером посредством RS-232. Отсюда и огромное количество вопросов от начинающих разработчиков. Количество вопросов на тему "как мне записать/принять данные с com-порта" на форумах по программированию не убывает, а скорее растет. Именно количество этих вопросов побудило меня к написанию статьи. Хотелось бы подчеркнуть, что статья предназначена именно для новичков в этом вопросе, и соответственно я старался упростить изложение материала.
Новинки книжного рынка   |x|
Delphi. Справочник
Популярный справочник по Delphi Pascal издательства O'Reilly содержит подробное описание языка программирования одного из лучших средств быстрой разработки приложений для Windows.
Книга открывается введением в язык Delphi Pascal и подробным описанием объектной модели Delphi. Отдельная глава посвящена информации о типе времени выполнения (RTTI), т. е. информации, предоставляемой компилятором, и являющейся "ключом" к интегрированной среде разработки (IDE) Delphi. Следует отметить, что этот материал плохо документирован в других источниках, в том числе в официальных файлах помощи Delphi. В издание включена глава о создании многопоточных приложений, в которой описаны уникальные возможности Delphi Pascal и приемы эффективного использования этого языка для написания параллельных программ. Основу книги составляет полный упорядоченный справочник по набору средств языка программирования Delphi. Каждая статья справочника включает: синтаксис в соответствии со ст андартными соглашениями, описание, список аргументов функции или процедуры (если они есть), советы и приемы использования данного средства языка в реальных программах, краткий пример и перекрестные ссылки на связанные ключевые слова.
Каким бы опытом работы с Delphi вы ни обладали, эта книга станет вашим постоянным помощником. В ней вы найдете решение многих проблем, а также получите возможность изучить более тонкие вопросы языка.

Автор: Лишнер
Другие сайты о DELPHI   |x|
Delphi Media
Множество компонент, исходников, информации для программирования мультимедиа на Delphi.
Dimchik

» Оценка сайта: 3
Опрос населения :)
Какой раздел сайта вам больше нравится?
»»» FAQ
»»» Статьи
»»» Новости мира компонент
»»» Форумы
»»» Компоненты
»»» База по другим сайтам
Для души

Хокку дня
Велик Император
Hо столько портвейна
Как я, он, пожалуй, не выпьет...

Афоризмы
Иногда даже слепая курица может найти себе зернышко....

Фраза дня
Другое достоинство этого недостатка состоит в том...

Дурацкие законы (информация предоставлена сайтом kurilka.com)
Во Франции строжайще запрещено звать свинью "Наполеоном".
В Пенсильвании (США) не разрешается, чтобы в доме вместе проживали более 16-ти женщин (по мнению законодателей, 17 женщин - это уже бордель). Закон, однако, позволят совместно жить 120-ти мужчинам.

И на закуску коротенький анекдот
В автосервисе:
- Машина не едет!
- Прокладку поменять надо!
- Какую?
- Ушастую!
- А где она?
- Между рулем и передним сиденьем!

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=8000


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное