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


Реализация объектов 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;   \
 

См. также

Общие сведения об объекте и интерфейсе MAPI