Artigo: 122488 - Última revisão: segunda-feira, 8 de Dezembro de 2003 - Revisão: 3.0

PROBLEMA: Como utilizar a automatização erro código & ajuda a partir 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 | Reduzir tudo

Sintomas

Visual Basic versão 3.0 não relatar erros de automatização que resultam de excepções de automatização OLE. Em vez disso, comunica um valor de erro de 440 e uma cadeia de descrição de "Excepção de automatização OLE." O real wCode transmitido pelo servidor de automatização é perdida.

Ponto Da Situação

Este comportamento ocorre por predefinição no Visual Basic versão 3.0. Visual Basic for Applications, incluído no Excel versão 5.0, Visual Basic 4.x e posteriores e outros produtos da Microsoft, devolve o wCode correctamente.

Mais Informação

Quando um servidor de automatização MFC lança uma excepção de despacho OLE por AfxThrowOleDispatchException chamada, é criado um objecto de classe COleDispatchException. As variáveis de membros incluem um SCODE OLE, um contexto de ajuda, cadeia de descrição do erro e wCode (um código de número inteiro utilizado pelo Visual Basic).

A única informação que mantém o controlador de automatização do Visual Basic é a cadeia de descrição. No entanto, o servidor OLE do MFC automatização pode manter as informações utilizadas na chamada para AfxThrowOleDispatchException() e expõe um método adicional "Ajuda" que utiliza estas informações para fornecer ajuda para o utilizador. A partir de dentro o erro do Visual Basic processamento código, err é 440, Error(Err) é "OLE distribuição excepção" e erro $ é a cadeia real transmitida pelo servidor.

Fragmentos de código de exemplo

/* Compile options needed:
   standard MFC OLE project generated by AppWizard*/ 
				
  1. O método no servidor de automatização lança a excepção de despacho deve reter o contexto de ajuda e wCode como variável de membro o objecto de automatização como nesta função:
       void CMyObject::Exception()
       {
          m_nIDContext = <some context>;
          m_nSomeCode = <some code>;
          AfxThrowOleDispatchException(m_nSomeCode,"String",m_nIDContext);
       }
    						
  2. O servidor de automatização deve expõe um método que utiliza as variáveis de membros iniciar WinHelp ou outro motor de ajuda com o contexto actual da excepção como neste código:
       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 tratamento deve chamar o método erro expostas no servidor de automatização quando ocorre uma excepção de despacho. Segue-se exemplo de código do Visual Basic:
       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 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: 122488  (http://support.microsoft.com/kb/122488/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.