Написание плагинов для WGC

_____ Для поддержки дополнительных типов данных и алгоритмов поиска, в WGC 2.31 встроена подсистема плагинов. В пользовательском отношении плагин должен отобразить окно для выставления параметров поиска/отсева. В этом окне помимо выбора типа данных/поиска должны быть три кнопки: "Поиск", "Отсев" и "Отмена". После их нажатия функция отображения должна вернуть ID кнопки (1, 2, 3), что-бы WGC знал что ему делать. Плагином WGC считает любую dll - библиотеку находящуюся в папке wgc\Plugins и поддерживающей следующие функции:


RegisterWgcPlugin  (var pgName: PChar; var names: PPCharArray; const hwnd: THandle): dword; stdcall;
pgName - указатель на имя плагина
names - указатель на массив строк в которых содержится описание каждой реализованной плагином системе поиска/отсева (п/о) возвращает количество строк в массиве. Этот массив должен быть реализован статически или выделяться и освобождаться плагином. Если плагин реализует одну систему п/о в массиве должна быть одна строка.

DisplayPlugin (num: dword; var rqsset: dword) : dword; stdcall;
Эту функцию WGC вызывает при выборе в меню конкретной системы п/о данного плагина. При вызове этой функции плагин отображает соответсвующее этой системе окно с номером num. Пользователь в этом окне должен выбрать тип п/о, тип данных и ввести образец если требуется. При возврате функция должна вернуть условный ID кнопки нажатой пользователем. В переменной rqsset функция устанавливает биты соответсвующие выбраным запросам: 0 бит - первый запрос, 1 бит - второй и т.д. Таким образом плагин может создать несколько запросов.

SearchFirst (const buff: Pointer; const size: dword; const offests: PWordArray) : dword; stdcall;
Эта функция, вызываеться wgc для обработки каждого региона программы, в которой ведется поиск. Используя свой алгоритм поиска она должна найти все вхождения образца в буффер buff. В size функция принимает размер буффера. Результаты функция записывает в массив смещений offsets. Каждое смещение имеет тип word (2 байта) поскольку размер буффера не превышает 64K. Функция возвращает количество найденых смещений.

SearchNext (buff: pointer; offsets: PWordArray; count : dword) : dword; stdcall;
Эту функцию wgc вызывает для отсева смещений.
buff - указатель на буффер
offsets - указатель на массив смещений найденых в предыдущем поиске/отсеве
count - количество смещений в массиве offsets
Функция возвращает количество смещений оставшихся после отсева.

FreePlugin : boolean; stdcall;
Эту функцию wgc вызывает при выгрузке плагина. Может использоваться для освобождения динамической памяти. Результат возвращаемый функцией игнорируется.

При создании новых плагинов можно использовать исходный код демонстрационного плагина (компилируется под Delphi 6). Скачать его можно здесь (205Kb zip - архив)

Hosted by uCoz