Использование объектов MAPI

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

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

Когда пользователь объекта хочет выполнить вызов метода и этот объект реализует несколько интерфейсов, связанных с наследованием, пользователю не нужно знать, к какому интерфейсу принадлежит метод. Пользователь может вызвать любой из методов в любом из интерфейсов с одним указателем на объект . Например, на следующем рисунке показано, как клиентское приложение использует объект папки. Объекты папок реализуют интерфейс IMAPIFolder : IMAPIContainer , который наследует от IUnknown косвенно через IMAPIProp : IUnknown и IMAPIContainer : IMAPIProp. Клиент может вызывать один из методов IMAPIProp , например IMAPIProp::GetProps, и один из методов IMAPIFolder : IMAPIContainer , например IMAPIFolder::CreateMessage, аналогичным образом с тем же указателем объекта. Клиент не знает о том, что эти вызовы относятся к разным интерфейсам.

Использование объекта папки клиентом

Использование клиентом объекта папки

Эти вызовы по-разному переводятся в код в зависимости от того, выполняет ли клиент вызовы на C или C++. Прежде чем можно будет выполнить любой вызов метода, необходимо извлечь указатель на реализацию интерфейса. Указатели интерфейса можно получить следующими способами:

  • Вызов метода для другого объекта.

  • Вызов функции API.

  • Вызов метода IUnknown::QueryInterface для целевого объекта.

MAPI предоставляет несколько методов и функций API, возвращающих указатели на реализации интерфейса. Например, клиенты могут вызвать метод IMAPISession::GetMsgStoresTable для получения указателя на объект таблицы, который предоставляет доступ к сведениям поставщика хранилища сообщений через интерфейс IMAPITable : IUnknown . Поставщики услуг могут вызывать функцию API CreateTable для получения указателя на объект данных таблицы. Если функция или метод отсутствуют, а у клиентов или поставщиков служб уже есть указатель на объект, они могут вызвать метод QueryInterface объекта, чтобы получить указатель на другую реализацию интерфейса объекта.

См. также