Все плагины подразделяются на три вида: книга(), архив() и интегратор. Плагин-книга конвертирует содержимое книги из файла заданного формата в ActiveX компонент. Плагин-архив позволяет просматривать содержимое архивов и извлекать из них файлы. Плагин-интегратор позволяет интегрировать Shasoft eBook в сторонние приложения.
Каждый плагин представляет из себя динамическую библиотеку DLL, которая содержит в себе преодопределенные экспортируемые функции. Каждая экспортируемая функция в качестве первого параметра принимает указатель на внутренний API. Это набор различных функций, разбитых по группам.
Плагин каждого типа должен содержать функцию:
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, );Функция вызывается со следующими значениями: