Inicializando o provedor de transporte

Aplica-se a: Outlook 2013 | Outlook 2016

A interface transport-spooler define as chamadas que o spooler MAPI faz para um provedor de transporte. Os provedores de transporte implementam essas rotinas em uma DLL (biblioteca de vínculo dinâmico). O primeiro ponto de entrada direta na DLL usada pelo spooler MAPI deve ser a função de inicialização do provedor de transporte XPProviderInit.

O MAPI usa a rotina GetProcAddress para obter o endereço da rotina de inicialização do provedor de serviços e, em seguida, chama essa rotina. O nome da rotina de inicialização é XPProviderInit para provedores de transporte. É diferente para outros tipos de provedores de serviços MAPI, de modo que uma DLL possa conter qualquer combinação de tipos de provedor de serviços, mas apenas um provedor de serviços de um tipo específico. No entanto, um provedor de serviços de um determinado tipo pode implementar vários serviços desse tipo. Por exemplo, um provedor de transporte pode implementar a funcionalidade de transporte de mensagens para vários serviços de mensagens.

O arquivo de cabeçalho mapispi.h tem uma definição de tipo para o protótipo de função da função de inicialização do provedor de transporte e um nome de procedimento predefinido para ele. Nomeando as rotinas de inicialização em seus arquivos C e C++ com os mesmos nomes usados por GetProcAddress e usando uma declaração de exportação direta em seu arquivo DLL.DEF, você obtém automaticamente a verificação de tipo dos parâmetros em sua rotina de inicialização. Consulte o código-fonte do provedor de transporte de exemplo para obter exemplos. Para obter mais informações, consulte Exemplo de provedor de transporte.

Se a chamada de inicialização de um provedor de serviços for bem-sucedida, mas retornar um número de versão da interface do provedor de serviços muito pequeno para o MAPI manipular, o MAPI chamará imediatamente o método Release do objeto do provedor de serviços e prosseguirá como se a chamada de inicialização tivesse falhado com MAPI_E_VERSION. Dessa forma, o MAPI e o provedor de serviços definem em conjunto o intervalo de números de versão da interface do provedor de serviços que podem manipular e, se nada corresponder, o carregamento do provedor de serviços falhará com um valor de retorno MAPI_E_VERSION.

A última etapa para o spooler MAPI obter acesso aos recursos do provedor de serviços é fazer logon no provedor de transporte. O spooler MAPI chama o método IXPProvider::TransportLogon do objeto IXPProvider : IUnknown retornado de XPProviderInit. Essa é a chamada em que as credenciais, se usadas, são verificadas e as caixas de diálogo podem ser permitidas.

Se um processo abrir uma segunda sessão de transporte no mesmo provedor de transporte e sessão MAPI, a DLL do provedor de transporte não deverá criar um segundo objeto de provedor. O primeiro objeto de provedor deve ser usado para fazer logon na segunda sessão de transporte. Um provedor de transporte deve ser programado para dar suporte a várias sessões de transporte em um único objeto de provedor. Um segundo objeto de provedor só deverá ser criado se diferentes sessões MAPI forem usadas no mesmo processo.