Implementando objetos MAPI
Aplica-se a: Outlook 2013 | Outlook 2016
Objetos MAPI podem ser implementados usando classes C++ ou estruturas de dados C, dependendo do idioma e do conjunto de API que um cliente ou provedor de serviços está usando. Os provedores de serviços podem ser gravados em C ou C++ com a interface do provedor de serviços MAPI; aplicativos cliente também podem usar C ou C++. Se possível, clientes e provedores de serviços que usam a interface de programação orientada a objeto devem usar C++.
O C++ é a escolha preferida porque o MAPI é uma tecnologia orientada a objetos e o C++ se presta mais facilmente ao desenvolvimento orientado a objetos. O código resultante é mais simples e simples, facilitando a manutenção. A documentação MAPI é gravada principalmente para desenvolvedores do C++; todas as descrições de sintaxe para os métodos de interface MAPI nesta Referência estão em C++.
Os desenvolvedores podem usar o Microsoft Visual Studio e ferramentas de desenvolvimento de terceiros para desenvolver soluções que chamam MAPI. Observe que os desenvolvedores devem usar C ou C++não gerenciado, mas não gerenciado C++ para gravar soluções MAPI.
Quando um objeto MAPI é implementado, um cliente ou provedor de serviços cria código para todos os métodos de interface, código para quaisquer métodos privados específicos para a implementação e código para dar suporte a membros de dados privados para manter informações de estado. O código para os métodos de interface deve seguir as especificações publicadas pelo MAPI que documentam o comportamento esperado.
Há muitas macros no arquivo de cabeçalho Mapidefs.h e arquivos de cabeçalho OLE que clientes e provedores de serviços em qualquer idioma podem usar para ajudá-los com suas definições de objetos MAPI. Por exemplo, há uma macro para definir os métodos de cada uma das interfaces MAPI. A macro para definir os métodos da interface IUnknown aparece em Mapidefs.h da seguinte maneira:
#define MAPI_IUNKNOWN_METHODS(IPURE) \
MAPIMETHOD(QueryInterface) \
(THIS_ REFIID riid, LPVOID FAR * ppvObj) IPURE; \
MAPIMETHOD_(ULONG,AddRef) (THIS) IPURE; \
MAPIMETHOD_(ULONG,Release) (THIS) IPURE; \