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


Написание кода сервера форм

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

Сервер форм можно представить следующим образом:

  • Программа Win32, которая отображает интерфейс и обрабатывает сообщения Windows с помощью стандартных механизмов насоса сообщений Windows.

  • Объект , который регистрирует свою фабрику классов в OLE и активируется методами автоматизации OLE.

  • Объект MAPI, который следует правилам MAPI для взаимодействия с другими компонентами MAPI.

Код должен одновременно обрабатывать все три этих широких требования.

Дополнительные сведения о регистрации фабрики классов сервера форм см. в разделе Com и ActiveX Object Services в Windows SDK. Обработка сообщений Windows и отображение интерфейса — это стандартные методы программирования Windows, которые не имеют особых требований к формам MAPI. Опять же, Windows SDK содержит подробные сведения о программировании для Windows. В этом документе содержатся сведения, необходимые для реализации необходимых и необязательных интерфейсов формы MAPI, чтобы они соответствовали правилам MAPI для взаимодействия с другими компонентами MAPI, в первую очередь с диспетчером форм MAPI и клиентскими приложениями для обмена сообщениями.

Все интерфейсы, которые можно использовать при реализации серверов форм, являются производными (прямо или косвенно) от базового класса OLE IUnknown. Это означает, что все реализации этих интерфейсов должны иметь методы QueryInterface, AddRef и Release . Вы можете сэкономить много работы, если используете несколько наследование для реализации всех необходимых интерфейсов в одном новом классе, чтобы все используемые интерфейсы могли совместно использовать одну реализацию необходимых методов IUnknown . Дополнительные сведения см. в методах IUnknown::AddRef, IUnknown::QueryInterface и IUnknown::Release . Для этих методов нет особых соображений относительно серверов форм MAPI.

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

Интерфейсы формы MAPI не зависят от типа средства разработки, используемого для создания сервера форм. Это позволяет создавать формы с помощью различных средств разработки. Единственное требование заключается в том, что все серверы форм должны поддерживать необходимые интерфейсы формы MAPI.

Не все интерфейсы MAPI, связанные с формами, требуются всем серверам форм. Необязательные интерфейсы позволяют реализовать некоторые расширенные функции формы, которые не требуются большинству серверов форм. В следующей таблице перечислены интерфейсы, их использование и необходимость их реализации.

Интерфейс Описание Состояние
IMAPIForm : IUnknown
Основной интерфейс, используемый клиентами для загрузки серверов форм, выполнения команд формы и завершения работы серверов форм. Это также интерфейс, производный от OLE IUnknown , который используется для информирования других компонентов OLE о том, какие интерфейсы реализует объект формы. Обязательный
IPersistMessage : IUnknown
Используется при загрузке сообщений в и сохранении сообщений из объектов формы. Обязательный
IMAPIFormAdviseSink : IUnknown
Используется объектами формы для отслеживания состояния клиента обмена сообщениями и определения того, способен ли объект формы отображать следующее или предыдущее сообщение в папке. Необязательный
IClassFactory
Интерфейс фабрики классов OLE, используемый объектами формы для соответствия механизму фабрики классов OLE. Обязательный
IMAPIFormFactory : IUnknown
Используется, если сервер форм поддерживает несколько типов форм. В этом случае интерфейс IMAPIFormFactory позволяет клиентским приложениям получать доступ к нескольким интерфейсам IClassFactory (по одному на тип формы, поддерживаемый сервером форм), которые также должны быть реализованы сервером форм. Необязательный

См. также

Разработка серверов форм MAPI