Все плагины подразделяются на три вида: книга(
),
архив(
) и интегратор.
Плагин-книга конвертирует содержимое книги из файла заданного формата
в ActiveX компонент.
Плагин-архив позволяет просматривать содержимое архивов и извлекать из них
файлы. Плагин-интегратор позволяет интегрировать Shasoft eBook в
сторонние приложения.
Каждый плагин представляет из себя динамическую библиотеку DLL, которая содержит в себе преодопределенные экспортируемые функции. Каждая экспортируемая функция в качестве первого параметра принимает указатель на внутренний API. Это набор различных функций, разбитых по группам.
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-ке плагинах (их может быть несколько, хотя лучше делать по одному), также для проверки: поддерживает ли плагин работу с заданным файлом.
#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.Различать: для чего вызывается функция можно по параметру pBuffer. Если он = 0, то это запрашивается информация о плагине. Если не 0, то это проверка поддержки файла.
Плагин типа Книга(
) обязательно должен содержать функцию для конвертации
книги из файла в формат ActiveX объекта:
SEB_EXPORT int WINAPI SEB_FileToBook(PSEBPluginAPI pAPI, int id, LPSTR pFileName, ISeBookObj *pSeBook );Функция вызывается со следующими значениями:
Плагин типа Архив(
) обязательно должен содержать функцию для чтения списка
файлов архива.
SEB_EXPORT HANDLE WINAPI SEB_ArcNextItem(PSEBPluginAPI pAPI, int id, HANDLE hFile, LPSTR lpFileArcName );Функция вызывается со следующими значениями:
Плагин типа Архив(
) обязательно должен содержать функцию для получении
информации о файле по его идентификатору, который нам вернула
функция SEB_ArcNextItem.
SEB_EXPORT int WINAPI SEB_ArcGetItemInfo(PSEBPluginAPI pAPI, int id, HANDLE hFile, LPSTR lpBuffer );Функция вызывается со следующими значениями:
Плагин типа Архив(
) обязательно
должен содержать функцию для извлечения файла из архива.
SEB_EXPORT int WINAPI SEB_ArcUnPack(PSEBPluginAPI pAPI, int id, LPSTR lpFileArcName, LPSTR lpFileNamePack, LPSTR lpFileNameUnPack, );Функция вызывается со следующими значениями: