Link para funções MAPI
Aplica-se a: Outlook 2013 | Outlook 2016
Há três métodos de vinculação: vinculação implícita, vinculação explícita e um novo modelo híbrido usando a Biblioteca de Stub mapi.
Vinculação implícita
Historicamente, chamar funções MAPI em um aplicativo de mensagens sempre envolveu a vinculação à biblioteca Mapi32.lib. Isso incluiu o roteamento de chamadas MAPI para a biblioteca de stub do Windows MAPI, Mapi32.dll, que encaminhou as chamadas para a implementação padrão do cliente MAPI em tempo de execução. Esse processo de chamada é conhecido como vinculação implícita. O lado esquerdo da figura a seguir mostra um exemplo de vinculação implícita usada em um processo de chamada de função MAPI. O processo é iniciado por um aplicativo MAPI e envolve a biblioteca MAPI (Mapi32.lib) e o stub mapi do Windows (Mapi32.dll) e é concluído pela implementação do cliente MAPI do MAPI (Msmapi32.dll).
Comparação de vinculação implícita e explícita.
Vinculação explícita
Como o cliente MAPI padrão dá suporte à instalação sob demanda usando o MSI (Windows Installer), você pode desenvolver aplicativos de mensagens diretamente no stub mapi do Outlook em vez de usar a biblioteca MAPI e o stub mapi do Windows. O lado direito da figura anterior mostra um exemplo de um processo de chamada de função MAPI, começando com um aplicativo MAPI procurando o caminho e o nome de DLL para o stub mapi do Outlook (etapa 2 na seção a seguir) e fazendo chamadas de função para o stub mapi do Outlook (etapa 3 na seção a seguir). O procedimento a seguir mostra como chamar funções MAPI usando a vinculação explícita.
Observação
Essas informações sobre a vinculação explícita podem ser supérfluas às suas necessidades com a introdução do MAPIStubLibrary.lib discutido na seção a seguir. Assim como o modelo implícito, a nova biblioteca gerencia tudo e implementa a lógica de vinculação explícita que carrega o MAPI do Outlook diretamente.
Para obter mais informações sobre a vinculação explícita, consulte Vincular explicitamente.
Para chamar elementos de API MAPI sem a biblioteca MAPI e o stub mapi do Windows
No arquivo do programa, crie uma lista global de ponteiros de função para cada elemento de API MAPI que você está usando.
O exemplo a seguir mostra essa etapa.
//Global MAPI function pointers LPMAPIINITIALIZE pfnMAPIInitialize = NULL; LPMAPIUNINITIALIZE pfnMAPIUninitialize = NULL;
Crie uma função que inicialize funções MAPI para vincular à DLL MAPI do cliente MAPI padrão (por exemplo, Msmapi32.dll do Microsoft Outlook). Nesta função, faça o seguinte:
Carregue mapi32.dll do diretório do sistema apropriado.
Propriedade Valor x64 ou x86 nativamente %windir%\system32\mapi32.dll x86 no modo WoW %windir%\syswow64\mapi32.dll Chame a função FGetComponentPath para obter o caminho e o nome DLL que implementa o subsistema MAPI. Para obter mais informações, consulte Escolher uma versão específica do MAPI para carregar.
Carregue a DLL chamando a função LoadLibrary.
Inicialize a matriz de ponteiro de função MAPI chamando a função GetProcAddress.
O exemplo a seguir mostra as etapas anteriores:
void InitializeMapiFunctions() { { // Get the DLL path and name of the actual MAPI implementation. FGetComponentPath(g_szMapiComponentGUID, NULL, szMAPIDLL, MAX_PATH); // Load the DLL. hMod = LoadLibrary(szMAPIDLL); // Initialize MAPI functions. pfnMAPIInitialize = GetProcAddress(hMod, "MAPIInitialize"); pfnMAPIUninitialize = GetProcAddress(hMod, "MAPIUninitialize"); }
Por fim, chame a função que você criou na etapa 2 em seu aplicativo de mensagens antes de fazer chamadas para elementos de API MAPI.
Cuidado
Você deve uninitializar o subsistema MAPI antes de fechar seu aplicativo.
O exemplo a seguir mostra esta etapa:
int main() { HRESULT hr; InitializeMapiFunctions(); // Initialize the MAPI subsystem. hr = (*pfnMAPIInitialize)(NULL); if (hr!= S_OK) { // Handle the error case. } // Here is where you make calls to other MAPI interfaces. // Uninitialize the MAPI subsystem. (*pfnMAPIUninitialize)(); return (0); }
MAPIStubLibrary.lib
O advento do MAPI de Microsoft Outlook 2010 e 64 bits, que agora se estende até o Microsoft Outlook 2013, requer mais do que a API tradicional de 32 bits para implementação completa. Um novo projeto, a Biblioteca MAPI Stub, postado no site CodePlex fornece uma substituição suspensa para Mapi32.lib que dá suporte à criação de aplicativos MAPI de 32 bits e 64 bits. MAPIStubLibrary.lib elimina a necessidade de vincular explicitamente ao MAPI e, depois de construí-lo, você pode remover Mapi32.lib das configurações do vinculador, substituindo-o por MAPIStubLibrary.lib; nenhuma modificação adicional em seu código deve ser necessária. Ele também elimina a necessidade de gravar o código LoadLibrary, GetProcAddress e FreeLibrary para lidar com exportações mais recentes incluídas neste arquivo de biblioteca, mas não em Mapi32.lib, o que seria necessário se você usasse a vinculação explícita.
Algumas das novas funções vinculadas a esta biblioteca que não estão disponíveis no Mapi32.lib incluem o seguinte:
- GetDefCachedMode
- HrGetGALFromEmsmdbUID
- HrOpenOfflineObj
- MAPICrashRecovery
- OpenStreamOnFileW
- WrapCompressedRTFStreamEx
Um método alternativo de incorporar a Biblioteca stub mapi é copiar os arquivos de origem, MapiStubLibrary.cpp e StubUtils.cpp, diretamente em seu projeto e remover qualquer vinculação a Mapi32.lib e qualquer código que se vincule explicitamente ao MAPI.
Para acessar os arquivos da Biblioteca stub mapi e para obter informações sobre como compilar e integrá-lo ao seu projeto, bem como perguntas sobre essa biblioteca, como quando e por que usá-la, consulte a Biblioteca MAPI Stub no site CodePlex.