KLIRIK.NAROD.RU > ГЛАВНАЯ ДОБАВИТЬ В ИЗБРАННОЕ | ПОМОЩЬ
 [ Главная ] [ Лютеранство ] [ Полезности ] [ Гуделки ] [ Ссылки ] [ Форум ] [ Гостевая ] [ Автора! ]  
 

CP API

Последнее обновление:

Zakladki.ru

Добавить сайт:

Ваш архив:

Ваш персональный архив на Закладках.ru

Другие места

Карта сайта >

Оставить отзыв >

Обсудить >

Письмо автору >

 

Программный интерфейс приложения для плагинов The Bat! общего назначения (CP API)

Версия: 1.0
Дата: 10 Сентября 2003
Перевод: 18 Сентября 2003, отредактирован 21.09.2003.
Переводчик: Алексей Виноградов

Внимание: Данный перевод не является официальным!

1. Общие замечания

Начиная с версии 2 в The Bat! была введена возможность расширения функциональности за счёт дополнительных подключаемых модулей (плагинов). Данный документ описывает основные принципы использования подобных модулей, а также то, какая функциональность может/должна быть в них реализована.

2. Подключаемые модули (плагины)

Подключаемый модуль для The Bat! является 32-разрядной библиотекой динамической компоновки (DLL). Стандартное расширение файла для плагинов общего назначения это .TBP (TBP расшифровывается как The Bat Plugin – плагин для The Bat). Ниже приведён список функций, которые могут быть реализованы в подключаемом модуле (имена функций чувствительны к регистру):

  • TBP_Initialize
  • TBP_Finalize
  • TBP_GetName
  • TBP_GetVersion
  • TBP_GetStatus
  • TBP_GetInfo
  • TBP_NeedConfig
  • TBP_Setup
  • TBP_SetConfigData
  • TBP_GetConfigData
  • TBP_NeedCOM
  • TBP_GetSpamScore
  • TBP_FeedSpam
  • TBP_GetMacroList
  • TBP_ExecMacro

В минимальной реализации плагина должны быть реализованы следующие функции:

  • TBP_GetName
  • TBP_GetStatus

3. Соглашения по программированию

3.1. Модель вызова

Функции плагина должны быть реализованы с использованием стандартной модели вызова Win32 API, определяемой как WINAPI в языке С и stdcallв языке Object Pascal

3.2. Безопасность многозадачности

Любая функция плагина может быть вызвана одновременно из разных потоков, поэтому все функции должны поддерживать многопоточный режим и обеспечивать надлежащий уровень защиты внутренних данных. Если автор плагина не желает поддерживать полноценную многозадачность, простейшим выходом в этой ситуации может быть использование критических секций (EnterCriticalSection в начале функции и LeaveCriticalSection в конце, убедитесь, что критическая секция инициализируется в точке входа DLL или в функции TBP_Initialize, и что код между EnterCriticalSection и LeaveCriticalSection защищён от исключений)

3.3. Строки, завершающиеся нулевым символом

Если это не оговорено особо, длина строковых буферов НЕ ДОЛЖНА включать завершающий нулевой символ, а также этот символ НЕ ДОЛЖЕН добавляться при передаче любых строковых данных от плагинов.

3.4. Контроль «переполнения буфера»

В целях безопасности настоятельно рекомендуется не использовать локальные массивы переменных и буферы для извлечения данных из объектов, предоставляемых The Bat! Память под все буферы, передаваемые функциям плагина выделяется динамически, но всё же настоятельно рекомендуется обратить особое внимание на проблему «переполнения буфера», чтобы данные программы были в безопасности.

4. Языки программирования

Для создания подключаемых модулей может быть использован любой язык программирования, который может быть использован для создания модулей Win32 DLL, удовлетворяющий соглашениям об именах, моделях вызова и многозадачной безопасности, определяемым в данном документе.

В этом документе находятся определения функций на языках C и Object Pascal

5. Функции

5.1. Функции общего назначения.

Функции, описанные в этом разделе являются общими для всех типов плагинов. Они используются для передачи общей информации о плагине и обеспечивают надлежащий способ инициализации, завершения и конфигурирования плагина.


5.1.1. TBP_Initialize

Синтаксис:
C++: void WINAPI TBP_Initialize();
Object Pascal: procedure TBP_Initialize; stdcall;
Описание:

Данная функция вызывается для инициализации плагина. В процессе работы The Bat! она вызывается лишь однажды, сразу же после загрузки подключаемого модуля. Используйте TBP_Initialize для инициализации внутренних данных, необходимых для нормальной работы плагина.

Возвращаемые значения:

Нет. Если во время вызова TBP_Initialize возникает ошибка, критическая для дальнейшей работы плагина, то функция TBP_GetStatus должна вернуть код ошибки.


5.1.2. TBP_Finalize

Синтаксис:
C++: void WINAPI TBP_Finalize();
Object Pascal: procedure TBP_Finalize; stdcall;
Описание:

Данная функция вызывается один раз, перед тем, как плагин выгружается из памяти. Используйте TBP_Finalize для освобождения памяти, удаления временных файлов и т.д.

Возвращаемые значения:

Нет.


5.1.3. TBP_GetName

Синтаксис:
C++ int WINAPI TBP_GetName(char* ABuf, int ABufSize);
Object Pascal: function TBP_GetName(ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция вызывается, чтобы получить имя плагина.

Параметры:
ABuf [out] Указатель на буфер, принимающий строку с именем плагина. Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.
ABufSize [in] Размер строкового буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.
Возвращаемые значения:
Положительное число число байт, записанных в ABuf или необходимый размер буфера
Нуль или отрицательное число функция не поддерживается

5.1.4. TBP_GetVersion

Синтаксис:
C++ int WINAPI TBP_GetVersion(char* ABuf, int ABufSize);
Object Pascal: function TBP_GetVersion(ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция вызывается, чтобы получить имя версии плагина. Одобряется возвращать в этой функции любую значимую информацию о текущем состоянии плагина вдобавок к имени версии.

Параметры:

ABuf [out] Указатель на буфер, принимающий строку с именем плагина. Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.
ABufSize [in] Размер строкового буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.
Возвращаемые значения:
Положительное число число байт, записанных в ABuf или необходимый размер буфера
Нуль или отрицательное число функция не поддерживается

5.1.5. TBP_GetStatus

Синтаксис:
C++ int WINAPI TBP_GetStatus();
Object Pascal: function TBP_GetStatus: Integer; stdcall;
Описание:

Данная фуркция вызывается, чтобы определить, что плагин функционирует должным образом.

Возвращаемые значения:
0 (нуль) Плагин функционирует нормально
Не-нуль  код ошибки (будет зафиксирован в журнале)

5.1.6. TBP_GetInfo

Синтаксис:
C++ int WINAPI TBP_GetInfo(char* ABuf, int ABufSize);
Object Pascal: function TBP_GetInfo(ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция вызывается, чтобы получить дополнительную информацию о плагине. Эта информация будет отображена когда пользователь нажмёт кнопку «Информация» в окне настройки плагинов.

Замечание: Если текст с информацией начинается тэгом <HTML>, он будет отображён как документ HTML.

Параметры:
ABuf [out] Указатель на строковый буфер, принимающий строку с информацией о плагине. Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.
ABufSize [in] Размер строкового буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.
Возвращаемые значения:
Положительное число число байт, записанных в ABuf или необходимый размер буфера
Нуль или отрицательное число функция не поддерживается

5.1.7. TBP_NeedConfig

Синтаксис:
C++: int WINAPI TBP_NeedConfig();
Object Pascal: function TBP_NeedConfig: Integer; stdcall;
Описание:

Данная функция вызывается, чтобы определить, может ли плагин быть настроен из The Bat! Пользователь может настроить плагин, нажав на кнопку «Настроить» в окне настройки плагинов.

Возвращаемые значения:
0 (нуль) Плагин не может быть настроен из The Bat!
Не-нуль Плагин может быть настроен из The Bat!

5.1.8. TBP_Setup

Синтаксис:
C++ int WINAPI TBP_Setup();
Object Pascal: function TBP_Setup: Integer; stdcall;
Описание:

Данная функция может быть вызвана для настройки плагина из окна настройки The Bat! через нажатие кнопки «Настроить», или сразу же после установки плагина. TBP_Setup может быть вызвана The Bat! только в том случае, если TBP_ConfigNeeded вернула нулевой результат. Хэндл вызывающего окна может быть получен при помощи функции Win32 API GetActiveWindow.

Возвращаемые значения:
0 (нуль) Плагин был успешно настроен
Не-нуль Плагин не был настроен, вероятный код ошибки (возможно, в будущем будет фиксироваться в журнале)

5.1.9. TBP_SetConfigData

Синтаксис:
C++ int WINAPI TBP_SetConfigData(void* ABuf, int ABufSize);
Object Pascal: function TBP_SetConfigData (const ABuf; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция используется для передачи плагину данных о конфигурации из файла конфигурации плагинов.

Никаких специальных требований к формату конфигурационных данных нет; они трактуются как двоичные данные и могут содержать любые символы.

Функция TBP_SetConfigData вызывается после загрузки и инициализации плагина во время запуска программы.

Параметры:
ABuf [in] Указатель на двоичный буфер, содержащий данные о конфигурации плагина.
ABufSize [in] Размер двоичного буфера, на который указывает ABuf, в байтах.
Возвращаемые значения:
0 (нуль) Функция успешно завершилась
Не-нуль во время работы функции возник сбой, код ошибки (возможно, в будущем будет фиксироваться в журнале)

5.1.10. TBP_GetConfigData

Синтаксис:
C++ int WINAPI TBP_GetConfigData(void* ABuf, int ABufSize);
Object Pascal: function TBP_GetConfigData (var ABuf; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция используется для получения данных о конфигурации плагина после того, как он был настроен при помощи функции TBP_Setup, с целью соранить эти данные в файле конфигурации плагинов.

Никаких специальных требований к формату конфигурационных данных нет; они трактуются как двоичные данные и могут содержать любые символы.

Функция TBP_GetConfigData вызывается в том случае, если функция TBP_Setup вернула нулевое значение.

Параметры:
ABuf [out] Указатель на двоичный буфер, содержащий данные о конфигурации плагина. Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.
ABufSize [in] Размер двоичного буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.
Возвращаемые значения:
Положительное число число байт, записанных в ABuf или необходимый размер буфера
Нуль или отрицательное число функция не поддерживается

5.1.11. TBP_NeedCOM

Синтаксис:
C++ int WINAPI TBP_NeedCOM();
Object Pascal: function TBP_NeedCOM: Integer; stdcall;
Описание:

Данная функция вызывается, чтобы запросить плагин о необходимости инициализировать подсистему COM, т.е. о необходимости вызвать функцию CoInitialize перед использованием функций плагина в потоке.

Если в плагине реализованы функции, работающие с интерфейсом ITBPDataProvider, значение, возвращаемое этой функцией игнорируется, поскольку COM будет инициализирован в любом случае.

Возвращаемые значения:
0 (нуль) Плагин не требует инициализации COM
Не-нуль Плагин требует инициализации COM

5.2. Анти-спам

Данный раздел содержит информацию об анти-спамовых функциях плагинов.

5.2.1. TBP_GetSpamScore

Синтаксис:
C++ int WINAPI TBP_GetSpamScore(int MsgID, TBPGetDataProc* GetData);
Object Pascal: function TBP_GetSpamScore(MsgID: Integer; GetData: TBPGetDataProc): Integer; stdcall;
Описание:

Данная функция вычисляет спамовую оценку письма. Функция TBP_GetSpamScore вызывается для каждого плагина непосредственно перед сохранением письма в базу писем после его получения. Общая оценка вычисляется согласно настройкам пользователя. TBP_GetSpamScore должна возвращать оценку, присвоенную плагином письму, по 100-балльной шкале. Нулевая оценка означает, что письмо было расценено как легитимное, 100 баллов присваиваются письмам, которые безусловно являются спамом. Если возвращается отрицательная оценка, The Bat! расценивает это как указание, что письмо не было обработано плагином, и не учитывает эту оценку пои подсчёте итоговой оценки для данного письма (например, если установлено два плагина, и один из них вернул -1 а другой – 80, то средняя оценка будет 80; если оба вернули -1, средняя оценка будет 0)

Функция TBP_GetSpamScore также может быть использована для любой предварительной обработки письма (например, для извлечения некоторых данных из всех входящих писем и сохранения их в базе данных).

Параметры:
MsgID [in] Идентификатор обрабатываемого письма. MsgID передаётся как параметр в функцию GetData вместе с идентификатором свойств, чтобы получить необходимые данные о письме. Этот идентификатор уникален внутри The Bat! и не может быть более использован после выхода из функции TBP_GetSpamScore.
GetData [in] Указатель на функцию TBPGetDataProc, которая используется для получения данных о письме
Возвращаемые значения:
0-100 Спамовая оценка (по 100-балльной шкале), назначенная плагином письму
Отрицательное число Письмо не было обработано плагином

5.2.2. TBP_FeedSpam

Синтаксис:
C++ int WINAPI TBP_FeedSpam(int MsgID, int IsSpam, TBPGetDataProc* GetData);
Object Pascal: function TBP_FeedSpam(MsgID, IsSpam: Integer; GetData: TBPGetDataProc): Integer; stdcall;
Описание:

Данная функция может быть реализована в плагине с целью «обучения» его спамовым и не-спамовым письмам согласно предпочтениям пользователя. Функция TBP_FeedSpam вызывается, когда пользователь выделяет письма и использует команды “Mark as Junk” («Пометить как нежелательное») или “Mark as not Junk” («Пометить как желательное»).

Реализация функции TBP_FeedSpam не является обязательной и зависит от алгоритма, используемого для определения спама.

Плагин должен сохранять собранные данные отдельно от конфигурационных данных, передаваемых функцией TBP_GetConfigData

Параметры:
    
MsgID[in] Идентификатор обрабатываемого письма. MsgID передаётся как параметр в функцию GetData вместе с идентификатором свойств, чтобы получить необходимые данные о письме. Этот идентификатор уникален внутри The Bat! и не может быть более использован после выхода из функции TBP_FeedSpam.
IsSpam [in] Если параметр IsSpam нулевой, то письмо следует расценивать как спам, иначе оно является легитимным
GetData [in] Указатель на функцию TBPGetDataProc, которая используется для получения данных о письме
Возвращаемые значения:
0 (нуль) Плагин собрал новую информацию о письме
Не-нуль Письмо не было обработано, или никакой новой информации не получено

5.2.3. Функция обратного вызова (callback) TBPGetDataProc

Синтаксис:
C++ typedef int (WINAPI *TBPGetDataProc)(int MsgID, int DataID, char* Buf, int BufSize);
Object Pascal: TBPGetDataProc = function(MsgID, DataID: Integer; Buf: PChar; BufSize: Integer): Integer; stdcall;
Описание:

Функция обратного вызова (callback) TBPGetDataProc передаётся как параметр при вызове функций TBP_GetSpamScore и

TBP_FeedSpam для обеспечения доступа к данным обрабатываемого письма.

При помощи этой функции возможно получить практически всю необходимую информацию о письме без необходимости анализировать исходное письмо в «сыром» виде. Данные, возвращаемые этой функцией могут считаться текстовыми (хотя некоторые части могут быть закодированы согласно различным стандартам)

Параметры:
MsgID [in] Идентификатор обрабатываемого письма.
DataID [in] Идентификатор свойства, которое следует получить. Таблица возможных свойств приведена в разделе 5.2.4
Buf [out] Указатель на строковый буфер, принимающий данные элемента, определяемого DataID; Если Buf является нулевым указателем, TBPGetDataProc возвращает необходимый размер буфера.
BufSize [in] Размер строкового буфера, на который указывает Buf, в байтах. Если ABufSize отрицательно, TBPGetDataProc возвращает необходимый размер буфера.
Возвращаемые значения:
0 (нуль) или положительное число число байт, записанных в буфер, на который указывает параметр Buf или необходимый размер буфера в байтах
Отрицательное число функция выдала ошибку или элемент, заданный параметром DataID не существует

5.2.4. Идентификаторы свойств письма

Нижеследующая таблица описывает определённые в настоящий момент идентификаторы частей письма

Имя Значение Используется для получения…
mpidMessageHeader 100000 Заголовок письма в формате RFC 822
mpidMessageBody 100001 Декодированный текст письма, конвертированный в локальную кодовую страницу Windows
mpidMessageAttachments        100002 Список вложений, разделённый нулевым символом. Конец списка определён двойным нулевым символом
mpidMessageSender 100003 Декодированный список отправителей, конвертированный в локальную кодовую страницу Windows
mpidMessageSubject 100004 Декодированная тема письма, конвертированная в локальную кодовую страницу Windows
mpidRawMessage 100005 Исходный текст письма без каких-либо преобразований. Это может быть полезно, если плагин анализирует письма самостоятельно.

Другие идентификаторы, которые могут быть использованы плагином (с понятными именами и значениями) таковы:

midxSubject1
midxDate2
midxComment3
midxInReplyTo4
midxMessageID5
midxNewsgroups6
midxMailer7
midxContentType8
midxContentSubType9
midxExpireDate10
midxOrganization11
midxContentID12
midxContentMD513
midxPriority14
midxImportance15
midxContentLocation16
midxEncoding17
midxCharset18
midxBoundary19
midxMsgEncoding20
midxC_Name21
midxCD_Name22
midxReportType23
midxReferences24
midxC_Description25
midxContentDisposition26
midxContentLanguage27
midxC_ID29
midxC_AccessType30
midxC_Expiration31
midxC_Size32
midxC_Permission33
midxC_Site34
midxC_Directory35
midxC_Mode36
midxC_Server37
midxC_Subject38
midx_Files39
midx_Msgs40
midxReturnPath41
midxFromName42
midxFromAddr43
midxReplyName44
midxReplyAddr45
midxToName46
midxToAddr47
midxServerID48
midxRRC49
midxRRQ50
midxFileSubst51
midxC_Number52
midxC_Total53
midxXCFile54
midxMDN_To55
midxMDN_Options56
midxRefList57
midxC_MICAlg58
midxC_SMIMEType59
midxC_Protocol60
midxC_ProtocolType61
midxC_ProtocolSubType62
midxMatter63
midxListHelp64
midxListUnsub65
midxListSub66
midxListPost67
midxListOwner68
midxListArchive69
midxDecodedFrom70
midxDecodedTo71
midxDecodedSubj72
midxDecodedToEtc73
midxFrom74
midxTo75
midxCC76
midxBCC77
midxReplyTo78
midxSender79
midxXSender80

Примечание: Идентификаторы с именами на «midxC_» используются для получения значений, соответствующих RFC параметрам Content-Type (тип содержимого)

5.3. Пользовательские макросы

Данный раздел содержит описания функций, позволяющих добавить новые макросы в существующий набор макросов шаблонов (найти полный список встроенных макросов можно в справке The Bat!)

5.3.1. TBP_GetMacroList

Синтаксис:
C++ int WINAPI TBP_GetMacroList(char* ABuf, int ABufSize);
Object Pascal: function TBP_GetMacroList(ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция вызывается с целью получить разделённый символами переноса строки  (CR LF или “\n\r”) список макросов, реализованных в плагине. Этот список используется Шаблонным Процессором The Bat! для нахождения плагинов, реализующих неизвестные макросы. Учтите, что плагины не могут перезаписывать какие-либо встроенные макросы, поэтому перед именованием макроса обязательно следует убедиться, что имена новых макросов не конфликтуют со встроенными.

Имя макроса может состоять из любого количества символов; множество допустимых знаков ограничено Латинскими буквами и десятичными цифрами. Регистр в именах значения не имеет.

Параметры:
ABuf [out] Указатель на строковый буфер, принимающий строку, содержащую список макросов, реализованных в плагине, разделённый парами CR LF (\n\r). Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.
ABufSize [in] Размер строкового буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.
Возвращаемые значения:
Положительное число число байт, записанных в буфер ABuf или необходимый размер буфера
Нуль или отрицательное число функция не поддерживается

5.3.2. TBP_ExecMacro

Синтаксис:
C++ int WINAPI TBP_ExecMacro(char* AMacro, int MaxLen, ITBPDataProvider* Template, ITBPDataProvider* Params): Integer; stdcall;
Object Pascal: function TBP_ExecMacro(AMacro: PChar; MaxLen: Integer; Template, Params: ITBPDataProvider): Integer; stdcall;
Описание:

Данная функция вызывается каждый раз, когда Шаблонный Процессор выполняет макрос, зарегистрированный плагином. Плагин должен выполнить макрос согласно собственным правилам и вернуть либо индекс объекта Шаблона, в котором следует заменить текст, либо отрицательное число, в случае, если макрос заменён пустой строкой.

Параметры:

AMacro

[in] Указатель на строковый буфер, содержащий строку, заканчивающуюся нулевым символом и содержащую имя макроса, который следует выполнить.

MaxLen

[in] Максимальная длина имени макроса, находящегося в AMacro.

Template

[in] Указатель на объект Шаблонного Процессора; раздел 5.3.3 содержит список допустимых идентификаторов, которые могут быть использованы для задания и получения информации. Метод Template.ExecuteMacro может быть использован для вычисления простых шаблонов (это может быть особенно полезным для получения информации из адресной книги при помощи макросов %ABnnnPPP, использования регулярных выражений, задания значений пользовательских полей в заголовках письма), объект OutData применяется для возвращения результата выполнения шаблона, индекс данных результата равен 0.

Params

[in] Указатель на объект списка параметров. Метод Params.ItemCount возвращает число параметров, переданных в макрос. Для получения значения параметров следует вызвать Params.GetDataByID(Index,…), где параметр Index задаёт индекс параметра, начиная с нуля. Обратите внимание, что параметры, передаваемые в макрос сами по себе являются шаблонами; они вычисляются один раз и только в том случае, если запрашиваются через метод Params.GetDataByID.

Возвращаемые значения:
                                    
0 (нуль) или допустимое значениеИндекс в объекте Template, куда следует поместить результирующую строку
Отрицательное значениеМакрос был выполнен, но должен быть заменён пустой строкой

5.3.3. Индекс объектов шаблона

Ниже приведён список индексов, которые могут быть использованы для задания и получения информации для параметра-объекта Template, передаваемого в функцию TBP_ExecMacro. Назначение индексов должно быть понятно из их имён.

Строковые индексы (строковые данные доступны через методы ITBPDataProvider::GetDataByID и ITBPDataProvider::SetDataByID):

tpxQuotePrefix200  // Текущий префикс цитирования в том виде, как он отображается в тексте
tpxCharset211
tpxAccount214
tpxFrom215
tpxReplyTo216
tpxReturnPath217
tpxTo218
tpxCC219
tpxBCC220
tpxOrg221
tpxSubject222
tpxFullSubject223
tpxComment224
tpxOldTo225
tpxOldFrom226
tpxOldReplyTo227
tpxOldCC228
tpxOldBCC229
tpxOldSubject230
tpxOldComment231
tpxMatter232
tpxOldMatter233
tpxMsgID234
tpxOldMsgID235
tpxOldDate236
tpxOldRcvDate237
tpxOldReturn238
tpxOldOrg239
tpxOldText240
tpxText241  // Текст изначального сообщения (выделенная часть, если вызвана команда «Ответить с цитированием выделенного текста»)
tpxHeaders243
tpxAttachments244
tpxOldAttachments245
tpxOldCharset247
tpxTracking248 // Номер для отслеживания письма
tpxQuoteStyle249  // Заданный стиль цитирования, пустая строка
tpxRegExpPattern251
tpxRegExpText252
tpxFullText254  // Полный текст изначального сообщения
tpxLastAddress257
tpxCursorHeader261 

Целочисленные и булевые индексы (целочисленные данные доступны через методы ITBPDataProvider::GetIntValue и ITBPDataProvider::SetIntValue). Для булевых данных нулевое значение означает «Ложь», любое ненулевое означает «Истина».

Индекс ID Тип Значение
tpxWrapJustify 201 Булевое Если «истина», все последовательные вызовы макроса %Wrapped выдадут перенесённый текст, выровненный по правому и левому краю
tpxClear 202 Булевое Если «истина», текст, созданный шаблоном, полностью заменит текст в редакторе письма
tpxIsSignature 203 Булевое Если «истина», текст, созданный шаблоном, заменит текущую подпись в редакторе письма
tpxSignComplete 204 Целое < 0    Не подписывать письмо по завершении
=0       Использовать настройки подписывания по умолчанию
> 0    Подписать письмо по завершении
tpxEncryptComplete 205 Целое < 0 Не зашифровывать письмо по завершении
=0 Использовать настройки по умолчанию
> 0 Зашифровать письмо по завершении
tpxUseSMIME 206 Целое < 0 Не использовать S/MIME
=0 Использовать настройки по умолчанию
> 0 Использовать S/MIME
tpxUsePGP 207 Целое < 0    Не использовать OpenPGP
=0 Использовать настройки по умолчанию
> 0    Использовать OpenPGP
tpxRCR 208 Целое < 0 Не требовать подтверждения доставки
=0 Использовать настройки по умолчанию
> 0 Запросить подтверждения доставки
tpxRRQ 209 Целое < 0    Не требовать подтверждения прочтения
=0 Использовать настройки по умолчнаию
> 0    Запросить подтверждение о прочтении
tpxSplit 210 Целое < 0 Не разделять длинное письмо
=0 Использовать настройки по умолчанию
> 0 Разделять длинное письмо
tpxPriority 212 Целое < 0 Письмо имеет низкий приоритет
=0 Письмо имеет обычный приоритет
> 0 Письмо имеет высокий приоритет
tpxTotalPages 262 Целое (Только на печатаемых колонтитулах) Общее число страниц
tpxCurrentPage 263 Целое (Только на печатаемых колонтитулах) Текущий номер страницы
tpxFullTextDifferent 259 Булевое «истина», если данные, получаемые по идентификаторам tpxText и tpxFullText различны, иначе «ложь».
tpxCursorBody 260 Целое 1 – курсор должен быть установлен в теле сообщения
100 – курсор был установлен, но не в теле

Замечатие по поводу использования метода ITBPDataProvider::SetDataByID: постарайтесь, насколько это возможно, использовать метод ITBPDataProvider::ExecuteMacro для установки стандартных свойств шаблона.

6. Универсальный интерфейс обмена данными ITBPDataProvider

ITBPDataProvider является универсальным интерфейсом для обмена данными и командами между The Bat! и плагинами. Этот интерфейс поддерживается всеми объектами The Bat!, которые доступны либо будут доступны плагинам для упрощения (и тем самым повышения надёжности) связи с плагинами.

Синтаксис:
C++: interface DECLSPEC_UUID("9DD91B89-A551-4180-8A81-2CCF584CD4BF") ITBPDataProvider : public IUnknown 
{
    virtual int WINAPI GetDataByID(int ID, char* ABuf, int ABufSize) = 0;
    virtual int WINAPI SetDataByID(int ID, char* ABuf, int ABufSize) = 0;
    virtual int WINAPI GetIntValue(int ID) = 0;
    virtual int WINAPI SetIntValue(int ID, int Value) = 0;
    virtual int WINAPI GetIDType(int ID) = 0;
    virtual int WINAPI ItemCount() = 0;
    virtual HRESULT WINAPI ExecuteMacro(char* AMacro, int MaxLen, ITBPDataProvider* InData, ITBPDataProvider* OutData) = 0;
}
Object Pascal: ITBPDataProvider = interface ['{9DD91B89-A551-4180-8A81-2CCF584CD4BF}']
    function GetDataByID(ID: Integer; ABuf: PChar; ABufSize: Integer): Integer; stdcall;
    function SetDataByID(ID: Integer; ABuf: PChar; ABufSize: Integer): Integer; stdcall;
    function GetIntValue(ID: Integer): Integer; stdcall;
    function SetIntValue(ID, Value: Integer): Integer; stdcall;
    function GetIDType(ID: Integer): Integer; stdcall;
    function ItemCount: Integer; stdcall;
    function ExecuteMacro(AMacro: Pointer; MaxLen: Integer; InData, OutData: ITBPDataProvider): HResult; stdcall;
  end;

6.1.  ITBPDataProvider::GetDataByID

Синтаксис:
C++: virtual int WINAPI GetDataByID(int ID, char* ABuf, int ABufSize);
Object Pascal: function GetDataByID(ID: Integer; ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция предназначена для получения данных от объекта. Каждое читаемое свойство объекта должно быть по крайней мере доступным для чтения при помощи этой функции. Формат получаемых данных определяется типом, возвращаемым методом GetIDType и описанным в разделе 6.5

Параметры:

ID

[in] Идентификатор запрашиваемого свойства.

ABuf

[out] Указатель на строковый буфер, содержащий полученные данные. Если ABuf является нулевым указателем, то функция должна вернуть значение, равное необходимому размеру буфера в байтах.

ABufSize

[in] Размер строкового буфера, на который указывает ABuf, в байтах. Если ABufSize отрицательно, функция должна вернуть значение, равное необходимому размеру буфера в байтах.

Возвращаемые значения:
                                            
Нуль или положительное число:число байт, записанных в ABuf или необходимый размер буфера
Отрицательное число:функция не поддерживается

6.2. ITBPDataProvider::SetDataByID

Синтаксис:
C++: virtual int WINAPI SetDataByID(int ID, char* ABuf, int ABufSize);
Object Pascal: function SetDataByID(ID: Integer; ABuf: PChar; ABufSize: Integer): Integer; stdcall;
Описание:

Данная функция предназначена для назначения данных свойствам объекта. Формат данных, которые могут быть сохранены в свойствах, определяется типом, возвращаемым методом GetIDType

Примечание: некоторые объекты могут предоставлять к своим свойствам доступ только для чтения

Параметры:

ID

[in] Идентификатор свойства для изменения

ABuf

[in] Указатель на буфер памяти, содержащий данные для свойства.

ABufSize

[in] Размер буфера, на который указывает ABuf, в байтах

Возвращаемые значения:
                                        
Нуль или положительное числочисло байт, записанное в целевое свойство
Отрицательное значениефункция не поддерживается

6.3. ITBPDataProvider::GetIntValue

Синтаксис:
C++: virtual int WINAPI GetIntValue(int ID);
Object Pascal: function GetIntValue(ID: Integer): Integer; stdcall;
Описание:

Данная функция возвращает целочисленное значение свойства. Даже в том случае, если свойство не является численным, предполагается, что реализация постарается преобразовать необходимые данные в числовой формат. Например, если строковое свойство содержит ‘1001’, результат выполнения GetIntValue с ID-значением этого свойства должен быть 1001. Булевые данные должны быть преобразованы в целочисленные значения согласно общепринятым соглашениям (0 (нуль) означает Ложь, любое не нулевое значение означает Истину)

Параметры:
ID [in] Идентификатор запрашиваемого свойства.
Возвращаемые значения:

Функция всегда должна возвращать значение, соответствующее запрошенному индексу (ID) свойства. Для несуществующих свойств должен возвращаться 0 (нуль)


6.4. ITBPDataProvider::SetIntValue

Синтаксис:
C++: virtual int WINAPI SetIntValue(int ID, int Value);
Object Pascal: function SetIntValue(ID, Value: Integer): Integer; stdcall;
Описание:

Данная функция предназначена для присваивания 32-битных целочисленных значений заданному свойству объекта.

Примечание: некоторые объекты могут предоставлять к своим свойствам доступ только для чтения

Параметры:
ID [in] Идентификатор изменяемого свойства.
Value [in] 32-битное целочисленное значение для присваивания его заданному свойству.
Возвращаемые значения:
0 (нуль) Целочисленное свойство было успешно задано.
Любое другое Объект не может изменить заданное свойство.

6.5. ITBPDataProvider::GetIDType

Синтаксис:
C++: virtual int WINAPI GetIDType(int ID);
Object Pascal: function GetIDType(ID: Integer): Integer; stdcall;
Описание:

Данная функция возвращает идентификатор типа для свойства, заданного параметром ID;

Параметры:

ID

[in] Идентификатор целевого свойства

Возвращаемые значения:

Идентификатор типа свойства

Ниже приведён список определённых в настоящий момент типов идентификаторов:

Имя Значение Описание GetDataByID / SetDataByID Преобразование
dtcChar 0 Строковые данные Как есть
dtcInt 1 32-битное целое Текстовое представление числа
dtcInt64 2 64-битное целое Текстовое представление числа
dtcWChar 3 Текст в формате UNICODE Текст, конвертированный в локальную страницу кодировки
dtcBool 5 Булевское ‘0’ для «Ложь», ‘1’ для «Истина»
dtcBinary 6 Двоичные данные Текстовые данные, кодированные в Base64
dtcFloat 7 Вещественное число Текстовое представление числа

Отрицательное значение                          Свойство ещё не определено


6.6. ITBPDataProvider::ItemCount

Синтаксис:
C++: virtual int WINAPI ItemCount();
Object Pascal: function ItemCount: Integer; stdcall;
Описание:

Данная функция возвращает число сохранённых свойств для объекта-списка (такого, как параметр Params в функции TBP_ExecMacro)

Параметры:

Нет

Возвращаемые значения:

Число заданных свойств.


6.7. ITBPDataProvider::ExecuteMacro

Синтаксис:
C++: virtual HRESULT WINAPI ExecuteMacro(char* AMacro, int MaxLen, ITBPDataProvider* InData, ITBPDataProvider* OutData);
Object Pascal: function ExecuteMacro(AMacro: PChar; MaxLen: Integer; InData, OutData: ITBPDataProvider): HResult; stdcall;
Описание:

Данная функция предназначена для обеспечения удобного расширенного доступа к возможностям, предоставляемым объектом. Каждый объект, реализующий интерфейс ITBPDataProvider может включать собственный набор макросов, документированных именно для этого объекта.

Ниже приведён список объектов с документированным поведением метода ExecuteMacro:

Объект Где документирован
Объекты Шаблонного Процессора Раздел.5.3.2
Параметры:
AMacro

[in] Указатель на строковый буфер, содержащий строку, завершающуюся нулевым символом и содержащую текст макроса, который нужно выполнить.

MaxLen

[in] Максимальная длина текста макроса, находящегося в AMacro.

InData

[in] Указатель на объект ITBPDataProvider, содержащий входные данные для выполнения макроса, если требуется. Индексы свойств и их значения должны быть документированы для каждой реализации. В большинстве случаев, InData представляет собой нумерованный список параметров.

OutData

[out] Указатель на объект ITBPDataProvider, содержащий результат выполнения макроса, если требуется. Индексы свойств и их значения должны быть документированы для каждой реализации.

В большинстве случаев, свойство с нулевым индексом содержит результат выполнения макроса.

Возвращаемые значения:

Должны быть отдельно документированы для каждой реализации.


Copyright © 2003 by Alexey N. Vinogradov (the owner of klirik.narod.ru)
Используются технологии uCoz