Share via


Iniciar MAPI

Aplica-se a: Outlook 2013 | Outlook 2016

Todos os aplicativos cliente que usam as bibliotecas MAPI devem chamar a função MAPIInitialize . Para obter mais informações, consulte MAPIInitialize. MAPIInitialize inicializa dados globais para a sessão e prepara as bibliotecas MAPI para aceitar chamadas. Há alguns sinalizadores que são importantes para definir em algumas situações:

  • MAPI_NT_SERVICE

    Defina o sinalizador MAPI_NT_SERVICE se seu cliente for implementado como um serviço Windows. Se seu cliente for um serviço Windows e você não definir esse sinalizador, o MAPI não o reconhecerá como um serviço.

  • MAPI_MULTITHREAD_NOTIFICATIONS

    O sinalizador MAPI_MULTITHREAD_NOTIFICATIONS está relacionado à forma como o MAPI gerencia as notificações. O MAPI cria uma janela oculta que recebe mensagens de janela quando ocorrem alterações em um objeto que gera notificações. As mensagens de janela são processadas em algum momento, fazendo com que as notificações sejam enviadas e os métodos IMAPIAdviseSink::OnNotify apropriados sejam chamados.

  • MAPI_NO_COINIT

    Defina o sinalizador MAPI_NO_COINT para que MAPIInitialize não tente inicializar COM com uma chamada para CoInitialize. Se uma estrutura de MAPIINIT_0 for passada para MAPIInitialize com ulFlags definido como MAPI_NO_COINIT, MAPI assumirá que o COM já foi inicializado e ignorará a chamada para CoInitialize.

Se MAPI_MULTITHREAD_NOTIFICATIONS sinalizador não for passado, o MAPI criará a janela de notificação no thread usada para sua primeira chamada MAPIInitialize . O MAPI cria a janela de notificação em um thread separado se MAPI_MULTITHREAD_NOTIFICATIONS for passado – um thread dedicado ao tratamento de notificações. O MAPI espera que o thread usado para criar a janela de notificação oculta para:

  • Tenha um loop de mensagem.

  • Permaneça desbloqueado durante toda a vida da sessão.

  • Tenha um tempo de vida maior do que qualquer outro thread criado pelo seu cliente.

Você pode escolher qual thread é usado definindo um sinalizador na primeira chamada MAPIInitialize . O perigo em permitir que um de seus threads manipule as notificações é que, se o thread desaparecer, a janela de notificação será destruída e as notificações não poderão mais ser enviadas para nenhum dos seus outros threads. Além disso, o processamento especial pode ser necessário para controlar o envio das mensagens de notificação que são postadas na fila de mensagens da janela oculta.

Se você usar uma janela separada para lidar com notificações, certifique-se de que as notificações serão exibidas no momento apropriado em um thread apropriado. Você não precisará de nenhum código especial para marcar e processar as mensagens do Windows que são postadas na janela de notificação.

O MAPI recomenda que os seguintes tipos de aplicativos cliente usem um thread separado para criar a janela oculta para suporte à notificação:

  • Todos os clientes multithread.

  • Serviços windows com thread único e aplicativos de console Win32.

  • Clientes com thread único que não precisam usar seu thread de main para notificação.

Para usar a abordagem de thread separada, chame MAPIInitialize em cada thread, definindo o sinalizador MAPI_MULTITHREAD_NOTIFICATIONS.

Observação

Somente a primeira chamada de um cliente para MAPIInitialize faz com que uma janela oculta seja criada para dar suporte a notificações. As chamadas subsequentes só fazem com que uma contagem de referência seja incrementada.