Artigo: 315458 - Última revisão: quinta-feira, 4 de Março de 2004 - Revisão: 1.3

PROBLEMA: Simple MAPI BMAPI funções poderão não funcionar código do Visual Basic

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
importante : Este artigo contém informações sobre como modificar o registo. Antes de modificar o registo, certifique-se de que efectua uma cópia de segurança e de que compreende como o restaurar o registo se ocorrer um problema. Para obter informações sobre como efectuar uma cópia de segurança, restaurar e editar o registo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
256986  (http://support.microsoft.com/kb/256986/EN-US/ ) Descrição do registo do Microsoft Windows
Expandir tudo | Reduzir tudo

Sintomas

Chamadas para a função MAPISendMail efectuadas a partir do Microsoft Visual Basic código poderão falhar com uma mensagem de erro semelhante à seguinte:
Microsoft Outlook
Não existe nenhum cliente de correio predefinido ou o cliente de correio actual não consegue processar o pedido de mensagem. Execute o Microsoft Outlook e defina-lo como o cliente de correio predefinido.
Este problema ocorre normalmente quando o Microsoft Outlook Express é definido como o cliente de correio predefinido.

Causa

Programas de Visual Basic que utilizam Simple MAPI normalmente utilizam instruções Declare que importar as funções BMAPI. Quando o Outlook Express é o cliente de correio predefinido, a biblioteca de stub MAPI não pode encaminhar estas chamadas para o Outlook Express; em vez disso, as chamadas de falham e é apresentada uma mensagem de erro.

Resolução

Uma forma de resolver este problema é não utilizar instruções Declare que se referem as funções BMAPI. No entanto, uma vez que do Visual Basic não é possível chamar o BMAPI não funciona (a menos que manipular as estruturas necessárias ao nível binário), pode escrever código para chamar as funções de Simple MAPI a partir de uma linguagem que pode tratar as estruturas, esse C ou C++.

Duas outras resoluções são fornecidas no fim da secção "Mais informação".

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

A biblioteca de stub MAPI, o ficheiro Mapi32.dll, é a DLL que normalmente é carregado por uma aplicação cliente para utilizar SMAPI. A biblioteca de stub encaminha as chamadas para a implementação MAPI adequada, consoante as definições de registo. Desta forma, podem coexistir várias implementações sem substituir entre si.

Quando é efectuada uma chamada para uma função exportada pela biblioteca de stub, a biblioteca segue estes passos:
  1. Determina se a função é uma função de Simple MAPI ou uma função de Extended MAPI. As seguintes funções de exportação são marcadas na biblioteca de stub como estando Simple MAPI funções:

    • MAPIAddress
    • MAPIDeleteMail
    • MAPIDetails
    • MAPIFindNext
    • MAPIFreeBuffer
    • MAPILogoff
    • MAPILogon
    • MAPIReadMail
    • MAPIResolveName
    • MAPISaveMail
    • MAPISendDocuments
    • MAPISendMail

    Todas as outras funções de exportação são funções de Extended MAPI.
  2. Parece-se na seguinte chave de registo para determinar a implementação de MAPI predefinido actual:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::(default)
  3. Em seguida, procura o cliente chave para localizar o caminho da DLL correcta para carregar. Se a função é uma função de Simple MAPI, carrega a DLL especificada pelo valor DllPath e, em seguida, chama a função. Se a função de uma função de Extended MAPI, carrega a DLL especificada pelo valor DllPathEx . Depois de localizar a DLL adequada, em seguida, chama a função.

    No caso do Microsoft Outlook, por exemplo, procura o valor de DLLPath ou DLLPathEx na seguinte chave:
    Outlook HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft
  4. Se não for encontrado DllPathEx ou DllPath , a biblioteca de stub utiliza o ficheiro Mapi32x.dll, localizada no mesmo directório que a biblioteca de stub. Este ficheiro é normalmente uma cópia do ficheiro Mapi32.dll que já existia quando foi instalada a biblioteca de stub cujo nome foi mudada. Em muitos sistemas, especialmente aqueles em que tenham sido instaladas apenas o Outlook e Outlook Express, este ficheiro não existe.
  5. Se a biblioteca de stub não conseguir localizar Mapi32x.dll, apresenta a mensagem está localizada das seguintes chaves:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::PreFirstRun

    - ou -

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::NoMailClient
A razão para o problema quando utilizar o Outlook Express da seguinte forma:
  1. A maior parte dos código de Visual Basic utiliza instruções Declare com base no módulo de Mapivb32.bas, importa MAPISendMail como BMAPISendMail. A maioria das outras funções de SimpleMAPI também é declarada com os respectivos equivalentes BMAPI.Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
    163216  (http://support.microsoft.com/kb/163216/EN-US/ ) Mapivb32.bas actualizado para Simple MAPI em plataformas de 32 bits
  2. Uma vez que as funções BMAPI não são na lista de funções de Simple MAPI que utilizam a DLL especificada no DllPath , a biblioteca de stub encaminha-los utilizando o valor DllPathEx .
  3. Dado que o Outlook Express não implementa Extended MAPI, tem sem valor definido para DllPathEx .
  4. A biblioteca de stub tenta utilizar Mapi32x.dll, que não existe e como resultado apresenta a mensagem PreFirstRun .
Existem duas formas adicionais para resolver o problema:
  • Uma solução temporária é determinar se o Outlook Express é o cliente de correio electrónico predefinido e, se for, adicionar um valor DllPathEx ao registo da seguinte forma:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook Express::DllPathEx = %ProgramFiles%\Outlook Express\msoe.dll
    aviso : a utilização incorrecta do Editor de registo poderá provocar problemas graves que poderão forçar a reinstalação do sistema operativo. Microsoft não garante que os problemas resultantes da utilização incorrecta do Editor de registo possam ser resolvidos. As suas próprias risco da utilização do Editor de registo.

    Como o Outlook Express implementa e exporta o BMAPIFunctions a partir do ficheiro MSOE.dll, definir DllPathEx permite a biblioteca de stub para encaminhar as chamadas a eles. O perigo de fazê-lo é que um cliente tenta utilizar o Extended MAPI receberá um erro (porque o ficheiro MSOE.dll não exporta as funções de Extended MAPI) quando-pode, em vez disso, utilizou Mapi32x.dll com êxito.
  • Para forçar uma aplicação para utilizar a implementação do Outlook Express para todas as chamadas MAPI, crie um novo valor na seguinte chave de registo:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows mensagens Subsystem\MSMapiApps
    Defina o nome do valor para o nome da aplicação (tal como MyApp.exe) e, em seguida, defina o valor para o Outlook Express. Isto evita a biblioteca de stub e força que passe a todas as chamadas MAPI, incluindo chamadas BMAPI, directamente para o Outlook Express.

A informação contida neste artigo aplica-se a:
  • Microsoft Office Outlook 2007
  • Simple Messaging Application Programming Interface (MAPI)
Palavras-chave: 
kbmt kbmsg kbprb KB315458 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 315458  (http://support.microsoft.com/kb/315458/en-us/ )