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.
Carregue a biblioteca de stub mapi e especifique no registro uma DLL personalizada para carregar e despachar chamadas MAPI. Ou
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
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.
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
Leia o valor do
HKLM\Software\Clients\Mail::(default)
registro.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
MFCMAPI chama
GetMAPIPath
, passando NULL para o parâmetro cliente, para carregar a implementação mapi padrão.GetMAPIPath
chamaGetMapiMsiIds
para ler os valores de MSIComponentID, MSIApplicationLCID e MSIOfficeLCID.GetMapiMsiIds
chamaGetMailKey
para abrir a chave do registro para o cliente de email padrão.GetMapiMsiIds
usa o identificador de registro retornado porGetMailKey
para pesquisar valores para MSIComponentID, MSIApplicationLCID e MSIOfficeLCID.Os valores de MSIComponentID, MSIApplicationLCID e MSIOfficeLCID são retornados para
GetMAPIPath
.GetMAPIPath
em seguida, passa-os paraGetComponentPath
.GetComponentPath
carrega a biblioteca de stub mapi, Mapi32.dll, do diretório do sistema.GetComponentPath
em seguida, recupera o endereço da função FGetComponentPath de Mapi32.dll, supondo que Mapi32.dll exporta FGetComponentPath.Se a obtenção do endereço do FGetComponentPath de Mapi32.dll falhar,
GetComponentPath
recuperará o endereço de Mapistub.dll.GetComponentPath
em seguida, chama FGetComponentPath, obtendo o caminho da versão padrão do MAPI.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 .