Compartilhar via


Escolher uma versão MAPI específica para carregar

Aplica-se a: Outlook 2013 | Outlook 2016

Ao vincular explicitamente a uma implementação do MAPI, você deve selecionar cuidadosamente qual implementação carregar.

Há dois métodos para vincular explicitamente a uma implementação do MAPI.

  1. Carregue a biblioteca de stub mapi e especifique no registro uma DLL personalizada para carregar e despachar chamadas MAPI. Ou

  2. Implemente o algoritmo de pesquisa do cliente MAPI para pesquisar a versão do MAPI usada pelo cliente de email padrão e carregá-la.

Como você pode alterar o Mapi32.dll Configurações do Registro stub para direcionar seu aplicativo a usar qualquer implementação do MAPI, recomendamos que você direcione seu aplicativo para usar uma implementação de MAPI com a qual você testou. A seguir, descreve os dois métodos de vinculação explicitamente.

Ler informações de implementação mapi do registro

  1. As chaves do registro que indicam uma DLL personalizada para um cliente de email estão localizadas sob a HKLM\Software\Clients\Mail chave do cliente de email.

    A tabela a seguir descreve estas chaves:

    Chave Descrição
    MSIComponentID
    Um GUID (Windows Installer PublishComponent category ID) que identifica a DLL que exporta chamadas MAPI ou MAPI simples. Se definida, essa chave terá precedência sobre a chave DLLPath ou DLLPathEx .
    MSIApplicationLCID
    Identificador de localidade (LCID) para seu aplicativo. O primeiro valor de cadeia de caracteres identifica uma sub-chave dos valores de cadeia de HKLM\Software caracteres subsequentes e identifica valores de registro sob essa chave que contêm informações de localidade.
    MSIOfficeLCID
    LCIDs para Microsoft Office. O primeiro valor de cadeia de caracteres identifica uma sub-chave dos valores de cadeia de HKLM\Software caracteres subsequentes e identifica valores de registro abaixo dessa chave.

    Obtenha as informações dessas chaves.

  2. Passe os valores obtidos da etapa anterior para a função FGetComponentPath . FGetComponentPath é uma função que é exportada pelo Mapistub.dll de biblioteca de stubs mapi. Ele retorna o caminho da versão personalizada do MAPI.

Carregar a implementação do MAPI marcada como padrão

  1. Leia o valor do HKLM\Software\Clients\Mail::(default) registro.

  2. Procure as informações do cliente indicado, conforme descrito anteriormente.

Observação

Observe que o cliente de email padrão pode não implementar MAPI Estendido.

Exemplo

Para carregar MAPI conforme implementado pelo Outlook, pesquise as chaves HKLM\Software\Clients\Mail\Microsoft Outlook do registro em e passe-as para FGetComponentPath. FGetComponentPath retornará o caminho para a implementação do MAPI pelo Outlook.

Se as chaves MSIComponentID, MSIApplicationLCID e MSIOfficeLCID não estiverem definidas, marcar o valor do registro DLLPathEx. Se as chaves estiverem definidas, fGetComponentPath fornecerá o caminho da implementação do cliente de MAPI.

Implementando o algoritmo mapi client lookup

A tabela a seguir lista as quatro funções do MFCMAPI que são usadas para pesquisar o caminho para uma implementação personalizada do MAPI:

Function Description
GetMAPIPath
Obtém o caminho da biblioteca MAPI.
GetMailKey
Obtém a chave do registro de email MAPI.
GetMapiMsiIds
Obtém o identificador do Instalador do Windows.
GetComponentPath
Obtém o caminho do componente usando FGetComponentPath.

Como o MFCMAPI carrega a implementação padrão do MAPI por padrão, se você quiser usar uma implementação diferente do MAPI, você deve direcioná-la explicitamente para isso. Isso é executado usando a rotina SESSION\Load MAPI .

Como essas funções funcionam

  1. MFCMAPI chama GetMAPIPath, passando NULL para o parâmetro cliente, para carregar a implementação mapi padrão.

  2. GetMAPIPath chama GetMapiMsiIds para ler os valores de MSIComponentID, MSIApplicationLCID e MSIOfficeLCID.

  3. GetMapiMsiIds chama GetMailKey para abrir a chave do registro para o cliente de email padrão.

  4. GetMapiMsiIds usa o identificador de registro retornado por GetMailKey para pesquisar valores para MSIComponentID, MSIApplicationLCID e MSIOfficeLCID.

  5. Os valores de MSIComponentID, MSIApplicationLCID e MSIOfficeLCID são retornados para GetMAPIPath. GetMAPIPath em seguida, passa-os para GetComponentPath.

  6. GetComponentPath carrega a biblioteca de stub mapi, Mapi32.dll, do diretório do sistema.

  7. GetComponentPath em seguida, recupera o endereço da função FGetComponentPath de Mapi32.dll, supondo que Mapi32.dll exporta FGetComponentPath.

  8. Se a obtenção do endereço do FGetComponentPath de Mapi32.dll falhar, GetComponentPath recuperará o endereço de Mapistub.dll.

  9. GetComponentPath em seguida, chama FGetComponentPath, obtendo o caminho da versão padrão do MAPI.

  10. GetMAPIPath em seguida, retorna esse caminho para o chamador, que, em seguida, carrega MAPI e vincula explicitamente a ele, conforme descrito em Link para Funções MAPI.

Observação

  • Para dar suporte a cópias localizadas do MAPI para localidades em inglês e não inglês, GetMAPIPath leia os valores das subchaves MSIApplicationLCID e MSIOfficeLCID . GetMAPIPath em seguida, chama FGetComponentPath, primeiro especificando MSIApplicationLCID como szQualifier e novamente especificando MSIOfficeLCID como szQualifier. Para obter mais informações sobre chaves de registro para clientes de email que dão suporte a idiomas que não são inglês, consulte Configurando as chaves MSI para sua DLL MAPI.
  • Se o MFCMAPI não receber um caminho para MAPI usando GetMAPIPath, ele carregará a biblioteca de stub mapi do diretório do sistema.
  • O valor do registro MSMapiApps discutido em Mapear explicitamente chamadas MAPI para DLLs MAPI só se aplica quando a biblioteca MAPI Stub é usada. Aplicativos que carregam uma implementação específica do MAPI ou carregam a implementação padrão não precisam definir a chave do registro MSMapiApps .

Confira também