Поделиться через


Инициализация поставщика транспорта

Область применения: Outlook 2013 | Outlook 2016

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

MAPI использует подпрограмму GetProcAddress для получения адреса подпрограммы инициализации поставщика услуг, а затем вызывает ее. Имя подпрограммы инициализации — XPProviderInit для поставщиков транспорта. Она отличается для других типов поставщиков служб MAPI, так что одна библиотека DLL может содержать любое сочетание типов поставщиков услуг, но только один поставщик служб определенного типа. Однако один поставщик услуг заданного типа может реализовать несколько служб своего типа. Например, один поставщик транспорта может реализовать функции транспорта сообщений для нескольких служб сообщений.

Файл заголовка mapispi.h содержит определение типа для прототипа функции инициализации поставщика транспорта и предопределенное имя процедуры для него. Присваивая подпрограммам инициализации в файлах C и C++ те же имена, что и GetProcAddress , и используя простое объявление экспорта в файле DLL.DEF, вы автоматически получите проверку типа параметров в подпрограмме инициализации. Примеры см. в примере исходного кода поставщика транспорта. Дополнительные сведения см. в разделе Пример поставщика транспорта.

Если вызов инициализации поставщика услуг выполняется успешно, но возвращает номер версии интерфейса поставщика услуг, слишком малый для обработки MAPI, MAPI немедленно вызывает метод Release объекта поставщика услуг и продолжается так, как если бы вызов инициализации завершился сбоем с MAPI_E_VERSION. Таким образом, MAPI и поставщик услуг совместно определяют диапазон номеров версий интерфейса поставщика услуг, которые они могут обрабатывать, и если ничего не соответствует, загрузка поставщика услуг завершается ошибкой с MAPI_E_VERSION возвращаемым значением.

Последним шагом для диспетчера очереди MAPI при получении доступа к ресурсам поставщика услуг является вход в поставщик транспорта. Средство spooler MAPI вызывает метод IXPProvider::TransportLogon объекта IXPProvider : IUnknown, возвращенного из XPProviderInit. Это вызов, в котором проверяются учетные данные, если они используются, и диалоговые окна могут быть разрешены.

Если процесс открывает второй транспортный сеанс в том же поставщике транспорта и сеансе MAPI, библиотека DLL поставщика транспорта не должна создавать второй объект поставщика. Первый объект поставщика должен использоваться для входа во второй сеанс транспорта. Поставщик транспорта должен быть запрограммирован на поддержку нескольких сеансов транспорта в одном объекте поставщика. Второй объект поставщика должен быть создан только в том случае, если в одном процессе используются разные сеансы MAPI.