Реализация объектов MAPI
Область применения: Outlook 2013 | Outlook 2016
Объекты MAPI можно реализовать с помощью классов C++ или структур данных C в зависимости от языка и набора API, используемого клиентом или поставщиком услуг. Поставщики услуг могут быть написаны на языке C или C++ с помощью интерфейса поставщика услуг MAPI; клиентские приложения также могут использовать C или C++. По возможности клиенты и поставщики услуг, использующие объектно-ориентированный программный интерфейс, должны использовать C++.
C++ является предпочтительным выбором, так как MAPI — это объектно-ориентированная технология, а C++ подходит для объектно-ориентированной разработки. Полученный код проще и проще, что упрощает его обслуживание. Документация MAPI написана в основном для разработчиков C++; Все описания синтаксиса для методов интерфейса MAPI в этом справочнике приведены в C++.
Разработчики могут использовать Microsoft Visual Studio и сторонние средства разработки для разработки решений, вызывающих MAPI. Обратите внимание, что разработчики должны использовать C или неуправляемый C++, но не управляемый C++ для написания решений MAPI.
При реализации объекта MAPI клиент или поставщик служб создает код для всех методов интерфейса, код для всех частных методов, относящихся к реализации, и код для поддержки членов частных данных для хранения сведений о состоянии. Код для методов интерфейса должен соответствовать спецификациям, опубликованным MAPI, которые документировать ожидаемое поведение.
В файле заголовка Mapidefs.h и файлах заголовков OLE есть много макросов, которые клиенты и поставщики служб на любом языке могут использовать для помощи в определении объектов MAPI. Например, существует макрос для определения методов каждого интерфейса MAPI. Макрос для определения методов интерфейса IUnknown отображается в Mapidefs.h следующим образом:
#define MAPI_IUNKNOWN_METHODS(IPURE) \
MAPIMETHOD(QueryInterface) \
(THIS_ REFIID riid, LPVOID FAR * ppvObj) IPURE; \
MAPIMETHOD_(ULONG,AddRef) (THIS) IPURE; \
MAPIMETHOD_(ULONG,Release) (THIS) IPURE; \