Come sostituire l'eccezione di # import genera meccanismo per ActiveX Data Objects (ADO) in Visual c ++

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

177425
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Nota Microsoft Visual c ++ .NET 2002 e Microsoft Visual c ++ .NET 2003 supportano sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows. Le informazioni contenute in questo articolo si applicano solo al codice Visual C++ non gestito.Microsoft Visual c ++ .NET 2005 supporta sia il modello di codice gestito fornito da Microsoft .NET Framework che il modello di codice non gestito nativo di Microsoft Windows.
Sommario
L'istruzione # import per creare l'applicazione client introduce exception handling tramite la classe di eccezione _com_error quando un wrapper per il metodo di un oggetto rileva un HRESULT non riuscito. È possibile che motivi validi per sostituire questo meccanismo con la propria implementazione.
Informazioni
Esistono due modi per utilizzare # Import e non generare eccezioni per HRESULT non riuscita. Il primo è sufficiente utilizzare la clausola di raw_interfaces_only con l'istruzione # import. Tuttavia, Nega alcuni dei vantaggi delle classi wrapper che fornisce # Import.

La seconda tecnica è fornendo la propria implementazione per _com_raise_error, che presenta la seguente implementazione prototipo e all'impostazione predefinita:

   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);   }				
Questa funzione è dichiarata ma non implementata nel file Comdef.h. Se si fornisce un'implementazione personalizzata in un file obj, il linker utilizza tale implementazione, a differenza di portandola dal file comsupp.lib. in un proprio oggetto nel file comsupp.lib _com_raise_error esiste in modo che può essere facilmente sostituito dal codice.

Riportato di seguito è un'implementazione di esempio di eccezione di # import genera la funzione.

Nota : attualmente il compilatore ignora una specifica di eccezione funzione e genera l'avviso seguente:

avviso C4290: specifica di eccezione c ++ ignorata.
In questa fase, i dettagli di implementazione della specifica di eccezione sono stati standardizzati e sono accettati ma non implementati in Microsoft Visual c ++. Codice compilato con specifiche di eccezione ignorata potrebbe essere necessario ricompilare sia collegato a essere riutilizzato nelle versioni future di supporto specifiche di eccezione. È possibile evitare questo avviso utilizzando il pragma warning:

#pragma warning( disable : 4290 ) 				

Codice di esempio

   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 );				
Il codice tenta di aprire un oggetto di connessione ADO (ActiveX Data Objects) senza fornire le informazioni di connessione valida. Sostituzione _com_raise_error impedito che il _com_error vengano generati.

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 177425 - Ultima revisione: 02/22/2014 06:55:09 - Revisione: 4.0

  • 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
  • kbnosurvey kbarchive kbmt kbhowto kbcompiler kbdatabase kbinfo kbmdacnosweep KB177425 KbMtit
Feedback