|
Все плагины подразделяются на два вида: книга( ) и архив( ).
Плагин-книга конвертирует содержимое книги из файла заданного формата
в ActiveX компонент.
Плагин-архив позволяет просматривать содержимое архивов и извлекать из них
файлы.
Каждый плагин представляет из себя динамическую библиотеку DLL, которая
содержит в себе преодопределенные экспортируемые функции. Каждая
экспортируемая функция в качестве первого параметра принимает указатель
на внутренний API. Это набор различных функций, разбитых по группам.
Экспортируемые функции
SEB_GetIdSupportPlugin - получить информацию о плагине/проверить: поддерживает ли плагин переданный файл
SEB_FileToBook - конвертировать книгу из файла в формат ActiveX объекта.
SEB_ArcNextItem - получить следующий файл архива
SEB_ArcGetItemInfo - получить информацию о файле: наименование и размер
SEB_ArcUnPack - Распаковать файл архива
Плагин каждого типа должен содержать функцию:
SEB_EXPORT int WINAPI SEB_GetIdSupportPlugin(PSEBPluginAPI pAPI,
int id,
LPSTR pBuffer,int sizeBuf,
LPSTR pFileName,
LPSEBPluginInfo pSEBPluginInfo
);
Данная функция служит для получении информации о содержащихся в DLL-ке
плагинах (их может быть несколько, хотя лучше делать по одному), также
для проверки: поддерживает ли плагин работу с заданным файлом.
При получении информации о плагинах функция вызывается со следующими значениями:
id - идентификатор предыдущего плагина (при первом вызове = 0).
pBuffer = NULL
sizeBuf - значение не определено
pFileName - значение не определено
pSEBPluginInfo - указатель на структуру, которую нужно заполнить информацией о плагине
#define BUFFER_INFO 64
typedef struct
{
CHAR Type; // Тип: 'B'-книга, 'A'-архив
CHAR Name[BUFFER_INFO]; // Название
CHAR Ext[BUFFER_INFO]; // Расширение
CHAR Author[BUFFER_INFO]; // Автор
CHAR EMail[BUFFER_INFO]; // Контактный e-mail
int lParam; // Параметр для передачи данных по
// всем плагинам данной библиотеки
} SSEBPluginInfo, *LPSEBPluginInfo;
Нужно заполнить структуру pSEBPluginInfo и вернуть идентификатор плагина.
Помните, что функция будет вызвана ещё раз с этим идентификатором и если
больше плагинов нет, то вы должны вернуть 0.
При вызове функции для проверки поддержки работы с файлом
функция вызывается со следующими значениями:
id - идентификатор плагина
pBuffer - указатель на буфер с начальными данными файла
sizeBuf - размер данных в буфере pBuffer
pFileName - путь к проверяемому файлу. Как правило для
проверки файла на нужный формат хватает буфера с данными. Но если по переданным
начальным данным файла вы не смогли определиться, то можно открыть файл и проверить
его полностью.
pSEBPluginInfo - указатель на структуру, которую нужно заполнить информацией о плагине
Нужно заполнить структуру pSEBPluginInfo и вернуть идентификатор плагина,
если файл поддерживается данным плагином или 0, в случае, если не поддерживается.
Различить: для чего вызывается функция можно по параметру pBuffer. Если он = 0,
то это запрашивается информация о плагине. Если не 0, то это проверка поддержки
файла.
Плагин типа Книга( ) обязательно должен содержать функцию для конвертации
книги из файла в формат ActiveX объекта:
SEB_EXPORT int WINAPI SEB_FileToBook(PSEBPluginAPI pAPI,
int id,
LPSTR pFileName,
ISeBookObj *pSeBook
);
Функция вызывается со следующими значениями:
id - идентификатор плагина
pFileName - путь к файлу
pSeBook - указатель на ActiveX объекта.
Важное замечание: после конвертации не нужно вызввать метод запуска мастера
создания RunWizard, это будет сделано в вызывающей программе.
Плагин типа Архив( ) обязательно должен содержать функцию для чтения списка
файлов архива.
SEB_EXPORT HANDLE WINAPI SEB_ArcNextItem(PSEBPluginAPI pAPI,
int id,
HANDLE hFile,
LPSTR lpFileArcName
);
Функция вызывается со следующими значениями:
id - идентификатор плагина
hFile - идентификатор предыдущего файла. Равен 0 для первого файла.
lpFileArcName - путь к архиву
Функция должна возвратить идентификатор следующего файла или 0, если
файлов больше нет.
Обратите особое внимание, что функция должна возвращать список
файлов с путями. Т.е. не надо возвращать строчку с папками, но
без наименования файла.
Плагин типа Архив( ) обязательно должен содержать функцию для получении
информации о файле по его идентификатору, который нам вернула
функция SEB_ArcNextItem.
SEB_EXPORT int WINAPI SEB_ArcGetItemInfo(PSEBPluginAPI pAPI,
int id,
HANDLE hFile,
LPSTR lpBuffer
);
Функция вызывается со следующими значениями:
id - идентификатор плагина
hFile - идентификатор файла который нам вернула функция SEB_ArcNextItem
lpBuffer - указатель на буфер, куда следует поместить
наименование файла с полным путем этого файла внутри архива
Функция должна возвратить размер неупакованного файла в байтах.
Плагин типа Архив( ) обязательно
должен содержать функцию для извлечения файла из архива.
SEB_EXPORT int WINAPI SEB_ArcUnPack(PSEBPluginAPI pAPI,
int id,
LPSTR lpFileArcName,
LPSTR lpFileNamePack,
LPSTR lpFileNameUnPack,
);
Функция вызывается со следующими значениями:
id - идентификатор плагина
lpFileArcName - имя файла архива
lpFileNamePack - имя файла с путем для распаковки (формат такой,
который нам вернула функция SEB_ArcGetItemInfo
в параметре lpBuffer).
lpFileNameUnPack - имя файла в который нужна распаковать файл
|