Como substituir a exceção do # Import aumentando mecanismo para ActiveX Data Objects (ADO) no Visual C++

Traduções deste artigo Traduções deste artigo
ID do artigo: 177425 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Observação Microsoft Visual C++ .NET 2002 e Microsoft Visual C++ .NET 2003 oferecem suporte o modelo de código gerenciado fornecido pelo Microsoft .NET Framework e o modelo de código do Windows de Microsoft nativo não gerenciado. As informações neste artigo se aplicam somente ao código do Visual C++ não gerenciado.Microsoft Visual C++ .NET 2005 oferece suporte o modelo de código gerenciado que é fornecido pelo Microsoft .NET Framework e o modelo de código do Windows de Microsoft nativo não gerenciado.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Usando a instrução # import para criar seu aplicativo cliente apresenta manipulação através da classe de exceção _com_error quando um wrapper para um método do objeto encontra uma falha HRESULT de exceções. Talvez você tenha motivos válidos para substituir esse mecanismo por sua própria implementação.

Mais Informações

Há duas maneiras usar # Import e não geram exceções para HRESULTS falhou. A primeira é simplesmente usar a cláusula raw_interfaces_only com a instrução # import. No entanto, isso anula algumas das vantagens das classes de wrapper # Import fornece.

A segunda técnica é fornecendo sua própria implementação para _com_raise_error, que tem a seguinte implementação de protótipo e padrão:

   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 está declarada mas não implementada no arquivo Comdef.h. Se você fornecer sua própria implementação em um arquivo .obj, o vinculador usa essa implementação em oposição a trazendo-do arquivo Comsupp.lib. _com_raise_error existe no seu próprio objeto no arquivo Comsupp.lib para que ele possa ser substituído facilmente pelo seu código.

A seguir é uma implementação exemplo de exceção do # de import aumentando a função.

Observação : no momento o compilador ignora uma exceção especificação de função e gera o seguinte aviso:

Aviso C4290: especificação de exceção de C++ ignorado.
Neste momento, os detalhes da implementação da especificação de exceção tem não foi padronizados e são aceitos mas não implementados no Microsoft Visual C++. Código compilado com especificações de exceção ignorados talvez precise ser recompilado e vinculados a ser reutilizado em versões futuras oferecer suporte a especificações de exceção. Você pode evitar esse aviso usando o aviso pragma:

#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 );

				
Esse código tenta abrir um objeto de conexão do ActiveX Data Objects (ADO) sem fornecer quaisquer informações de conexão válida. Substituir _com_raise_error impediu que o _com_error sendo gerado.

Propriedades

ID do artigo: 177425 - Última revisão: sábado, 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 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: 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