ID do artigo: 122488 - Última revisão: segunda-feira, 8 de dezembro de 2003 - Revisão: 3.0

PROBLEMA: Como utilizar erro código & ajuda de automação 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.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Visual Basic versão 3.0 não relatar erros de automação que resultam de exceções de automação OLE. Em vez disso, ele informa um valor err de 440 e uma seqüência de descrição de "Exceção de automação OLE." O real wCode passado pelo servidor de automação será perdido.

Situação

Esse comportamento é por design na versão 3.0 do Visual Basic. Visual Basic for Applications, incluído no Excel versão 5.0, Visual Basic 4.x e posteriores e outros produtos Microsoft, retorna o wCode corretamente.

Mais Informações

Quando um servidor de automação do MFC lança uma exceção de expedição OLE por chamada AfxThrowOleDispatchException, um objeto de classe COleDispatchException é criado. Suas variáveis de membro incluem um SCODE OLE, um contexto da Ajuda, descrição de erro de seqüência de caracteres e wCode (um código de inteiro usado pelo Visual Basic).

A única informação que preserva o controlador de automação do Visual Basic é a descrição de seqüência de caracteres. No entanto, o servidor de automação OLE do MFC pode preservar as informações usadas na chamada para AfxThrowOleDispatchException() e expor um método de "Ajuda" adicional que usa essas informações para fornecer ajuda para o usuário. De dentro do tratamento código, de erros do Visual Basic Err é 440, Error(Err) é "OLE distribuir exceção" e $ de erro é a seqüência real passada pelo servidor.

Trechos de código de exemplo

/* Compile options needed:
   standard MFC OLE project generated by AppWizard*/ 
				
  1. O método no servidor de automação que lança a exceção de expedição deve reter o contexto de Ajuda e wCode como variável de membro do objeto automação como essa função:
       void CMyObject::Exception()
       {
          m_nIDContext = <some context>;
          m_nSomeCode = <some code>;
          AfxThrowOleDispatchException(m_nSomeCode,"String",m_nIDContext);
       }
    						
  2. O servidor de automação deve expor um método que usa essas variáveis de membro para iniciar o WinHelp ou outro mecanismo de ajuda com o contexto de exceção como esse código real:
       short CMyObject::GetError()
       {
          // From here you can use the member variable code
          // and context to start WinHelp or do whatever
          // help code you need to do ...
          AfxGetApp()->WinHelp(m_nIDContext);
          return m_nSomeCode;
       }
    						
  3. O erro do Visual Basic rotina de manipulação deve chamar o método exposto erro no servidor de automação quando ocorre uma exceção de expedição. Aqui está o código do Visual Basic exemplo:
       Sub Command1_Click ()
          On Error GoTo EHandle
          Dim a As object
          Set a = CreateObject("TestAuto")
          ' Next line causes exception:
          a.exception
       EHandle:
          Msg = "The error message for error number "
          Msg = Msg & Err & " is:" & NL & NL
          Msg = Msg & """" & Error(Err) & """"
          MsgBox Msg  ' Display message.
          ' Next line starts WinHelp engine by calling method in server.
          a.GetError
          Exit Sub
       End Sub

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
Palavras-chave: 
kbmt kbautomation kbinterop kbprb kbtshoot KB122488 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 122488  (http://support.microsoft.com/kb/122488/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.