Ядро
Прежде всего следует подумать об инкапсуляции функций подключённого плагина в класс. Этот класс реализован в Modules.pas. При создании экземпляра класса происходит поиск и запоминание всех адресов функций плагина. Последующие вызовы функций происходят в о дноимённых методах класса в том случае, если они не равны. Я приведу только описание типа класса:
Code: |
type // описания типов функций модуля TGetModuleInfo=function:TModuleInfo;stdcall; TInitialize=procedure;stdcall; TRun=procedure;stdcall; TTerminate=procedure;stdcall; TSetData=procedure(Kind:TDataKind;const Buffer;Size:Integer);stdcall;
// непосресдвенно сам класс TModule=class private FFileName:String; //имя файла FHandle:THandle; // дескриптор библиотеки FModuleInfo:TModuleInfo; // информация о модуле // адреса функций плагина FGetModuleInfo:TGetModuleInfo; // функция получения информации о модуле FInitialize:TInitialize; // процедура инициализации FRun:TRun; // процедура запуска FTerminate:TTerminate; // процедура останова FSetData:TSetData; // процедура передачи данных public constructor Create(AFileName:String;var IsValidModule:Boolean); destructor Destroy;override; // вызов функций плагина function GetModuleInfo:TModuleInfo; procedure Initialize; procedure Run; procedure Terminate; procedure SetData(Kind:TDataKind;const Buffer;Size:Integer); // свойства плагина property FileName:String read FFileName; property Handle:THandle read FHandle; property ModuleInfo:TModuleInfo read FModuleInfo; end; |
Как видно из текста, это простая надстройка над плагином, не добавляющая функциональности, но позволяющая хранить всё в одном объекте.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!