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

Traduzione articoli Traduzione articoli
Identificativo articolo: 177425 - Visualizza i prodotti a cui si riferisce l?articolo.
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.
Espandi tutto | Chiudi tutto

In questa pagina

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.

Proprietà

Identificativo articolo: 177425 - Ultima modifica: sabato 22 febbraio 2014 - Revisione: 4.0
Le informazioni in questo articolo si applicano 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
Chiavi: 
kbnosurvey kbarchive kbmt kbhowto kbcompiler kbdatabase kbinfo kbmdacnosweep KB177425 KbMtit
Traduzione automatica articoli
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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 177425
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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