Como substituir excepção do #import aumentar mecanismo para ActiveX Data Objects (ADO) no Visual C++

Traduções de Artigos Traduções de Artigos
Artigo: 177425 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Nota Microsoft Visual C++ .NET 2002 e Microsoft Visual C++ .NET 2003 suportam o modelo de código gerido que é fornecido pelo Microsoft .NET Framework e o modelo de código do Microsoft Windows nativo não gerido. As informações neste artigo aplicam-se apenas ao código de Visual C++ não gerido.Microsoft Visual C++ .NET 2005 suporta o modelo de código gerido que é fornecido pelo Microsoft .NET Framework e o modelo de código do Microsoft Windows nativo não gerido.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Utilizando a instrução #import para criar a aplicação de cliente apresenta a excepção a processar a classe de excepção _com_error quando um wrapper para método um objecto encontra um HRESULT falhou. Poderá ter motivos válidos para substituir este mecanismo de implementação do próprio.

Mais Informação

Existem duas formas de utilizar #import e não tem-aumentar excepções para HRESULTS falhou. A primeira simplesmente consiste em utilizar a cláusula raw_interfaces_only com a instrução #import. No entanto, isto nega algumas das vantagens das classes de mensagens publicitárias #import fornece.

A segunda técnica consiste em fornecer a suas próprias implementação para _com_raise_error, que tem a seguinte implementação protótipo e predefinido:

   void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0)
   throw(_com_error);

   void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)
   {
       throw _com_error(hr, perrinfo);
   }
				
Esta função é declarada mas não implementada no ficheiro Comdef.h. Se fornecer implementação num ficheiro .OBJ, o linker utiliza essa implementação por oposição a colocar do ficheiro Comsupp.lib. _com_raise_error existe no seu próprio objecto no ficheiro Comsupp.lib para que possa ser facilmente substituído pelo seu código.

Segue-se uma implementação de exemplo de excepção de #import aumentar função.

Nota : actualmente o compilador ignora uma especificação de excepção de função e gera o seguinte aviso:

aviso C4290: especificação de excepção de C++ ignorado.
Neste momento, os detalhes de implementação da especificação de excepção tem não foi padronizados e são aceites mas não implementados no Microsoft Visual C++. Código compilado com especificações de excepção ignorados necessitar de ser novamente compiladas e ligado ao ser reutilizados em futuras versões suportam as especificações de excepção. Pode evitar este aviso utilizando pragma Aviso:

#pragma warning( disable : 4290 ) 
				

Código de exemplo

   void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)
       {
           //This message box is for demonstration purpose only.
           AfxMessageBox( "_com_raise_error (HRESULT, IErrorInfo*)" );
           //Your own error handling code or just an abort.
       }

    #import <msado15.dll>
        ...


     _bstr_t     bstrEmpty(L"");
     _ConnectionPtr  Conn1 = NULL;
     Conn1.CreateInstance( __uuidof( Connection ) );
     Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty );

				
Este código tenta abrir um objecto de ligação de ActiveX Data Objects (ADO) sem fornecer quaisquer informações de ligação válida. Substituir _com_raise_error impediu que o _com_error ser aumentado.

Propriedades

Artigo: 177425 - Última revisão: 22 de fevereiro de 2014 - Revisão: 4.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhowto kbcompiler kbdatabase kbinfo kbmdacnosweep KB177425 KbMtpt
Traduçã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: 177425

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com