Мои мысли и проекты

Документация по написанию плагинов

Навигация
Счетчики
Cпoнcоры

Все плагины подразделяются на три вида: книга(), архив() и интегратор. Плагин-книга конвертирует содержимое книги из файла заданного формата в ActiveX компонент. Плагин-архив позволяет просматривать содержимое архивов и извлекать из них файлы. Плагин-интегратор позволяет интегрировать Shasoft eBook в сторонние приложения.

Каждый плагин представляет из себя динамическую библиотеку 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 - имя файла в который нужна распаковать файл