![]() |
|
|||||||
|
Внутренний 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) - Открыть файл для работы Параметры Возвращаемое значение HANDLE FILE->OpenFileW(LPWSTR FileName, int mode) - Открыть файл для работы Параметры Возвращаемое значение int FILE->ReadFile(HANDLE hFile, LPSTR Buffer, int len) - Чтение данных из файла в буфер Параметры Возвращаемое значение int FILE->WriteFile(HANDLE hFile, LPSTR Buffer, int len) - Запись данных в файл Параметры Возвращаемое значение int FILE->CloseFile(HANDLE hFile) - Закрыть файл Параметры Возвращаемое значение int FILE->GetFileSize(HANDLE hFile) - Определить размер открытого файла Параметры Возвращаемое значение HANDLE ZIP->OpenFile(LPSTR FileNameArc, LPSTR FileName) - Открыть файл из архива ZIP для чтения Параметры Возвращаемое значение int ZIP->ReadFile(HANDLE hFile, LPSTR Buffer, int len) - Чтение данных из файла в буфер Параметры Возвращаемое значение int ZIP->CloseFile(HANDLE hFile) - Закрыть файл Параметры Возвращаемое значение HANDLE ZIP->NextItem(HANDLE hFile, LPSTR FileNameArc) - Получить следующий файл архива с полным путем архива Параметры Возвращаемое значение HANDLE hFile ZIP->GetItemInfo(int idfile, LPSTR Buffer) - Получить информацию о файле: наименование и размер Параметры Возвращаемое значение int RTF->FromWindow(HWND hRichEdit, ISeBookObj *pSeBook) - Конвертировать текст из окна RichEdit в ActiveX компонент Параметры Возвращаемое значение HANDLE XML->ParserCreate() - Создать объект-парсер XML Возвращаемое значение int XML->Parse(HANDLE hParser, LPSTR FileName, IXMLParserEvent *pXMLParserEvent) - Парсить XML файл Параметры Возвращаемое значение Дополнительная информация Наш парсер построен по 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) - Уничтожить парсер Параметры Возвращаемое значение int XML->GetOffsetPos(HANDLE hParser) - Получить текущее смещение обрабатываемого XML файла Параметры Возвращаемое значение WCHAR * XML->GetValue(HANDLE hParser, const WCHAR **attrs, const LPWSTR name, const LPWSTR defval) - Получить значение атрибута Параметры Возвращаемое значение int XML->IsParentElement(HANDLE hParser, LPWSTR name) - Проверить: есть ли среди родительских ТЭГов ТЭГ с именем name Параметры Возвращаемое значение HANDLE BASE64->Create() - Создать объект для декодирования данных из формата BASE64 Возвращаемое значение int BASE64->Push(HANDLE hBase64, int Ch) - Записать в объект очередной кодированный символ Параметры Возвращаемое значение Дополнительная информация Если метод вернул не 0, т.е. есть декодированные данные для чтения, то необходимо сразу их прочитать с помощью метода Get, так как вызов метода Push может затереть уже декодированные данные. В данный метод можно передавать любые символы, метод сам отфильтрует те, что относятся к кодам BASE64. int BASE64->Get(HANDLE hBase64) - Получить значение декодированного байта Параметры Возвращаемое значение | |||||||