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