Как работать с плагинами ?
Я сделал так - выбираю все 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 thenbegin ShowMessage('Hе найдено подключаемых модулей.'); Close; end; repeat lib:=LoadLibrary(PChar(sr.Name)); if lib<>0 thenbegin @pgetn:=GetProcAddress(lib, 'GetPluginName'); if @pgetn=nil then FreeLibrary(lib) // Hе плагин elsebegin 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); ...
Работа с COM-портами под Windows
Практически любому компьютеру приходится связываться с внешними устройствами. Практически любому программисту приходилось (приходится, придется) ваять программы под эти устройства. Огромное количество внешних устройств общаются с компьютером посредством RS-232. Отсюда и огромное количество вопросов от начинающих разработчиков. Количество вопросов на тему "как мне записать/принять данные с com-порта" на форумах по программированию не убывает, а скорее растет. Именно количество этих вопросов побудило меня к написанию статьи. Хотелось бы подчеркнуть, что статья предназначена именно для новичков в этом вопросе, и соответственно я старался упростить изложение материала.
Delphi. Справочник
Популярный справочник по Delphi Pascal издательства O'Reilly содержит подробное описание языка программирования одного из лучших средств быстрой разработки приложений для Windows. Книга открывается введением в язык Delphi Pascal и подробным описанием объектной модели Delphi. Отдельная глава посвящена информации о типе времени выполнения (RTTI), т. е. информации, предоставляемой компилятором, и являющейся "ключом" к интегрированной среде разработки (IDE) Delphi. Следует отметить, что этот материал плохо документирован в других источниках, в том числе в официальных файлах помощи Delphi. В издание включена глава о создании многопоточных приложений, в которой описаны уникальные возможности Delphi Pascal и приемы эффективного использования этого языка для написания параллельных программ. Основу книги составляет полный упорядоченный справочник по набору средств языка программирования
Delphi. Каждая статья справочника включает: синтаксис в соответствии со ст
андартными соглашениями, описание, список аргументов функции или процедуры (если они есть), советы и приемы использования данного средства языка в реальных программах, краткий пример и перекрестные ссылки на связанные ключевые слова. Каким бы опытом работы с Delphi вы ни обладали, эта книга станет вашим постоянным помощником. В ней вы найдете решение многих проблем, а также получите возможность изучить более тонкие вопросы языка.
Автор: Лишнер
Хокку дня
Велик Император Hо столько портвейна Как я, он, пожалуй, не выпьет...
Афоризмы
Иногда даже слепая курица может найти себе зернышко....
Фраза дня
Другое достоинство этого недостатка состоит в том...
Дурацкие законы (информация предоставлена сайтом kurilka.com)
Во Франции строжайще запрещено звать свинью "Наполеоном".
В Пенсильвании (США) не разрешается, чтобы в доме вместе проживали более 16-ти женщин (по мнению законодателей, 17 женщин - это уже бордель). Закон, однако, позволят совместно жить 120-ти мужчинам.
И на закуску коротенький анекдот
В автосервисе: - Машина не едет! - Прокладку поменять надо! - Какую? - Ушастую! - А где она? - Между рулем и передним сиденьем!