Внутренний API представляет из себя набор указателей на функции,
разбитые по группам:
typedef struct
{
PSPluginAPIfile FILE; // Функции для работы с файлами
PSPluginAPIzip ZIP; // Функции для работы с архивами ZIP
PSPluginAPIrtf RTF; // Функции для работы с файлами RTF
PSPluginAPIxml XML; // Функции для работы с файлами XML
PSPluginAPIbase64 BASE64; // Функции для конвертации данных из BASE64
} SSEBPluginAPI, *PSEBPluginAPI;
Функции для работы с файлами typedef struct
{
PFFILE_OpenFile OpenFile; // Открыть файл для работы
PFFILE_OpenFileW OpenFileW; // Открыть файл для работы
PFFILE_ReadFile ReadFile; // Чтение данных из файла в буфер
PFFILE_WriteFile WriteFile; // Запись данных в файл
PFFILE_CloseFile CloseFile; // Закрыть файл
PFFILE_GetFileSize GetFileSize; // Определить размер открытого файла
} SPSPluginAPIfile, *PPSPluginAPIfile; Функции для работы с архивами ZIP typedef struct
{
PFZIP_OpenFile OpenFile; // Открыть файл из архива ZIP для чтения
PFZIP_ReadFile ReadFile; // Чтение данных из файла в буфер
PFZIP_CloseFile CloseFile; // Закрыть файл
PFZIP_NextItem NextItem; // Получить следующий файл архива с полным путем архива
PFZIP_GetItemInfo GetItemInfo; // Получить информацию о файле: наименование и размер
} SPSPluginAPIzip, *PPSPluginAPIzip; Функции для работы с файлами RTF typedef struct
{
PFRTF_FromWindow FromWindow; // Конвертировать текст из окна RichEdit в ActiveX компонент
} SPSPluginAPIrtf, *PPSPluginAPIrtf; Функции для работы с файлами XML typedef struct
{
PFXML_ParserCreate ParserCreate; // Создать объект-парсер XML
PFXML_Parse Parse; // Парсить XML файл
PFXML_ParserDestroy ParserDestroy; // Уничтожить парсер
PFXML_GetOffsetPos GetOffsetPos; // Получить текущее смещение обрабатываемого XML файла
PFXML_GetValue GetValue; // Получить значение атрибута
PFXML_IsParentElement IsParentElement; // Проверить: есть ли среди родительских ТЭГов ТЭГ с именем name
} SPSPluginAPIxml, *PPSPluginAPIxml; Функции для конвертации данных из BASE64 typedef struct
{
PFBASE64_Create Create; // Создать объект для декодирования данных из формата BASE64
PFBASE64_Push Push; // Записать в объект очередной кодированный символ
PFBASE64_Get Get; // Получить значение декодированного байта
PFBASE64_Destroy Destroy; // Уничтожить объект для декодирования данных из BASE64
} SPSPluginAPIbase64, *PPSPluginAPIbase64;
HANDLE FILE->OpenFile(LPSTR FileName, int mode) - Открыть файл для работы Параметры LPSTR FileName - имя файла int mode - режим открытия. MODE_READ-открыть для чтения/MODE_WRITE-открыть для записи Возвращаемое значение Возвращает дескриптор открытого файла или 0 в случае ошибки
HANDLE FILE->OpenFileW(LPWSTR FileName, int mode) - Открыть файл для работы Параметры LPWSTR FileName - имя файла int mode - режим открытия. MODE_READ-открыть для чтения/MODE_WRITE-открыть для записи Возвращаемое значение Возвращает дескриптор открытого файла или 0 в случае ошибки
int FILE->ReadFile(HANDLE hFile, LPSTR Buffer, int len) - Чтение данных из файла в буфер Параметры HANDLE hFile - дескриптор файла LPSTR Buffer - указатель на буфер int len - размер буфера Возвращаемое значение Возвращает количество прочитанных байт
int FILE->WriteFile(HANDLE hFile, LPSTR Buffer, int len) - Запись данных в файл Параметры HANDLE hFile - дескриптор файла LPSTR Buffer - указатель на буфер int len - размер буфера Возвращаемое значение Возвращает количество записанных байт
int FILE->CloseFile(HANDLE hFile) - Закрыть файл Параметры HANDLE hFile - дескриптор файла Возвращаемое значение Возвращает не 0, если операция выполнена успешно и 0 в случае ошибки.
int FILE->GetFileSize(HANDLE hFile) - Определить размер открытого файла Параметры HANDLE hFile - дескриптор файла Возвращаемое значение Возвращает размер файла в байтах
HANDLE ZIP->OpenFile(LPSTR FileNameArc, LPSTR FileName) - Открыть файл из архива ZIP для чтения Параметры LPSTR FileNameArc - имя файла-архива LPSTR FileName - имя файла внутри архива Возвращаемое значение Возвращает дескриптор открытого файла или 0 в случае ошибки
int ZIP->ReadFile(HANDLE hFile, LPSTR Buffer, int len) - Чтение данных из файла в буфер Параметры HANDLE hFile - дескриптор файла LPSTR Buffer - указатель на буфер int len - размер буфера Возвращаемое значение Возвращает количество прочитанных байт
int ZIP->CloseFile(HANDLE hFile) - Закрыть файл Параметры HANDLE hFile - дескриптор файла Возвращаемое значение Возвращает не 0, если операция выполнена успешно и 0 в случае ошибки.
HANDLE ZIP->NextItem(HANDLE hFile, LPSTR FileNameArc) - Получить следующий файл архива с полным путем архива Параметры HANDLE hFile - дескриптор предыдущего файла. При первом вызове = 0 LPSTR FileNameArc - указатель на буфер Возвращаемое значение Возвращает дескриптор текущего файла или 0, если список файлов закончился
HANDLE hFile ZIP->GetItemInfo(int idfile, LPSTR Buffer) - Получить информацию о файле: наименование и размер Параметры int idfile - дескриптор файла LPSTR Buffer - указатель на буфер, куда следует записать наименование файла Возвращаемое значение Возвращает размер файла в байтах. -1, если возвращается наименование директории.
int RTF->FromWindow(HWND hRichEdit, ISeBookObj *pSeBook) - Конвертировать текст из окна RichEdit в ActiveX компонент Параметры HWND hRichEdit - дескриптор окна RichEdit ISeBookObj *pSeBook - указатель на ActiveX компонент Возвращаемое значение Возвращает размер файла в байтах
HANDLE XML->ParserCreate() - Создать объект-парсер XML Возвращаемое значение Возвращает дескриптор созданного объекта
int XML->Parse(HANDLE hParser, LPSTR FileName, IXMLParserEvent *pXMLParserEvent) - Парсить XML файл Параметры HANDLE hParser - дескриптор парсера LPSTR FileName - найменование файла XML IXMLParserEvent *pXMLParserEvent - интерфейс обратного вызова для обработки событий парсера Возвращаемое значение Возвращает 1 в случае успешной отработки и 0 в случае ошибки Дополнительная информация Наш парсер построен по SAX-технологии. Т.е.
он при парсинге файла XML не загружает его полностью в память, а читает
последовательно и вызывает соответсвующее событие. Для получения событий нам
необходимо передать указатель на следующий абстрактный класс:
class IXMLParserEvent
{
public:
//Событие начала ТЭГа
WCHAR *name - название ТЭГа
WCHAR **attrs - список атрибутов ТЭГа и их значения.
Нечетные индексы - название атрибутов, четные - значения.
Если в нечетном индексе указатель = 0, то атрибутов больше нет.
virtual void OnStartElement(const WCHAR *name, const WCHAR **attrs) = 0;
//Событие конца ТЭГа
WCHAR *name - название ТЭГа
int start - позиция начала ТЭГа
virtual void OnEndElement(const WCHAR *name,int start) = 0;
//Событие данных внутри ТЭГов
WCHAR *s - данные
int len - длинна данных
virtual void OnCharacters(const WCHAR *s,int len) = 0;
};
Вам нужно унаследовать свой класс от IXMLParserEvent и переопределить
абстрактные методы, в которых и будет происходить обработка событий парсера.
int XML->ParserDestroy(HANDLE hParser) - Уничтожить парсер Параметры HANDLE hParser - дескриптор парсера Возвращаемое значение Возвращает 1 в случае успешной отработки и 0 в случае ошибки
int XML->GetOffsetPos(HANDLE hParser) - Получить текущее смещение обрабатываемого XML файла Параметры HANDLE hParser - дескриптор парсера Возвращаемое значение Возвращает смещение в обрабатываемом файле
WCHAR * XML->GetValue(HANDLE hParser, const WCHAR **attrs, const LPWSTR name, const LPWSTR defval) - Получить значение атрибута Параметры HANDLE hParser - дескриптор парсера const WCHAR **attrs - список атрибутов и значений в формате IXMLParserEvent->OnStartElement const LPWSTR name - название атрибута const LPWSTR defval - значение атрибута по умолчанию Возвращаемое значение Указатель на значение. 0, если значение не найдено.
int XML->IsParentElement(HANDLE hParser, LPWSTR name) - Проверить: есть ли среди родительских ТЭГов ТЭГ с именем name Параметры HANDLE hParser - дескриптор парсера LPWSTR name - название ТЭГа Возвращаемое значение Возвращает 1, если указанный ТЭГ встречается среди родительских ТЭГов и 0 в ином случае.
HANDLE BASE64->Create() - Создать объект для декодирования данных из формата BASE64 Возвращаемое значение Возвращает дескриптор созданного объекта
int BASE64->Push(HANDLE hBase64, int Ch) - Записать в объект очередной кодированный символ Параметры HANDLE hBase64 - дескриптор объекта для декодирования данных из BASE64 int Ch - кодированный символ Возвращаемое значение Возвращает количество декодированных символов, готовых к чтению методом Get Дополнительная информация Если метод вернул не 0, т.е. есть декодированные данные для чтения, то необходимо
сразу их прочитать с помощью метода Get, так как
вызов метода Push может затереть уже декодированные данные.
В данный метод можно передавать любые символы, метод сам отфильтрует те, что
относятся к кодам BASE64.
int BASE64->Get(HANDLE hBase64) - Получить значение декодированного байта Параметры HANDLE hBase64 - дескриптор объекта для декодирования данных из BASE64 Возвращаемое значение Возвращает значение декодированного байта
int BASE64->Destroy(HANDLE hBase64) - Уничтожить объект для декодирования данных из BASE64 Параметры HANDLE hBase64 - дескриптор объекта для декодирования данных из BASE64 Возвращаемое значение Возвращает 1 в случае успешной отработки и 0 в случае ошибки |