Condividi tramite


Classe CException

Classe di base per tutte le eccezioni nella libreria Microsoft Foundation Class.

Sintassi

class AFX_NOVTABLE CException : public CObject

Membri

Costruttori pubblici

Nome Descrizione
CException::CException Costruisce un oggetto CException.

Metodi pubblici

Nome Descrizione
CException::Delete Elimina un CException oggetto .
CException::ReportError Segnala un messaggio di errore in una finestra di messaggio all'utente.

Osservazioni:

Poiché CException è una classe base astratta che non è possibile creare CException direttamente oggetti, è necessario creare oggetti di classi derivate. Se è necessario creare una classe -style personalizzata CException, usare una delle classi derivate elencate in precedenza come modello. Assicurarsi che la classe derivata usi IMPLEMENT_DYNAMICanche .

Di seguito sono elencate le classi derivate e le relative descrizioni:

Nome Descrizione
CSimpleException Classe di base per le eccezioni MFC critiche per le risorse
CInvalidArgException Condizione di eccezione dell'argomento non valida
CMemoryException Eccezione di memoria insufficiente
CNotSupportedException Richiesta di un'operazione non supportata
CArchiveException Eccezione specifica dell'archivio
CFileException Eccezione specifica del file
CResourceException Risorsa Di Windows non trovata o non creatabile
COleException Eccezione OLE
CDBException Eccezione del database ( ovvero condizioni di eccezione derivanti dalle classi di database MFC basate sull'Connessione ivity open database)
COleDispatchException Eccezione ole dispatch (automazione)
CUserException Eccezione che indica che non è stato possibile trovare una risorsa
CDaoException Eccezione dell'oggetto di accesso ai dati ( ovvero condizioni di eccezione derivanti per le classi DAO)
CInternetException Eccezione Internet ,ovvero condizioni di eccezione derivanti dalle classi Internet.

Queste eccezioni devono essere usate con le THROWmacro , THROW_LAST, trycatch, and_catch, e end_catch . Per altre informazioni sulle eccezioni, vedere Elaborazione delle eccezioni o vedere l'articolo Gestione delle eccezioni (MFC).

Per rilevare un'eccezione specifica, usare la classe derivata appropriata. Per intercettare tutti i tipi di eccezioni, usare CExceptione quindi usare CObject::IsKindOf per distinguere tra CExceptionle classi derivate da . Si noti che CObject::IsKindOf funziona solo per le classi dichiarate con la IMPLEMENT_DYNAMIC macro, per sfruttare i vantaggi del controllo dei tipi dinamici. Anche qualsiasi CExceptionclasse derivata da che si crea deve usare la IMPLEMENT_DYNAMIC macro.

È possibile segnalare informazioni dettagliate sulle eccezioni all'utente chiamando GetErrorMessage o ReportError, due funzioni membro che funzionano con una delle CExceptionclassi derivate di .

Se una delle macro rileva un'eccezione, l'oggetto CException viene eliminato automaticamente e non eliminarlo manualmente. Se un'eccezione viene intercettata usando una catch parola chiave, non viene eliminata automaticamente. Vedere l'articolo Gestione delle eccezioni (MFC) per altre informazioni su quando eliminare un oggetto eccezione.

Gerarchia di ereditarietà

CObject

CException

Requisiti

Intestazione:afx.h

CException::CException

Questa funzione membro costruisce un CException oggetto .

explicit CException(BOOL bAutoDelete);

Parametri

b_AutoDelete
Specificare TRUE se la memoria per l'oggetto CException è stata allocata nell'heap. In questo modo l'oggetto CException verrà eliminato quando viene chiamata la Delete funzione membro per eliminare l'eccezione. Specificare FALSE se l'oggetto CException si trova nello stack o è un oggetto globale. In questo caso, l'oggetto CException non verrà eliminato quando viene chiamata la Delete funzione membro.

Osservazioni:

Normalmente non è mai necessario chiamare direttamente questo costruttore. Una funzione che genera un'eccezione deve creare un'istanza di una CExceptionclasse derivata da e chiamare il relativo costruttore oppure deve usare una delle funzioni throw MFC, ad esempio AfxThrowFileException, per generare un tipo predefinito. Questa documentazione viene fornita solo per completezza.

CException::Delete

Questa funzione verifica se l'oggetto CException è stato creato nell'heap e, in tal caso, chiama l'operatore delete sull'oggetto .

void Delete();

Osservazioni:

Quando si elimina un CException oggetto, usare la Delete funzione membro per eliminare l'eccezione. Non usare direttamente l'operatore delete , perché l'oggetto CException può essere un oggetto globale o essere stato creato nello stack.

È possibile specificare se l'oggetto deve essere eliminato quando viene costruito l'oggetto. Per ulteriori informazioni, vedere CException::CException.

È necessario chiamare Delete solo se si usa il meccanismo C++- trycatch. Se si usano le macro TRY MFC e CATCH, queste macro chiameranno automaticamente questa funzione.

Esempio

CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
// Note that this example performs the same actions as the
// example for CATCH, but uses C++ try/catch syntax instead
// of using the MFC TRY/CATCH macros. This sample must use
// CException::Delete() to delete the exception objects
// before closing the catch block, while the CATCH example
// implicitly performs the deletion via the macros.
try
{
   pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
      CFile::modeRead | CFile::shareDenyNone);
   ULONGLONG ullLength = pFile->GetLength();
   CString str;
   str.Format(_T("Your SYSTEM.INI file is %u bytes long."), ullLength);
   AfxMessageBox(str);
}
catch(CFileException* pEx)
{
   // Simply show an error message to the user.
   pEx->ReportError();
   pEx->Delete();
}
catch(CMemoryException* pEx)
{
   // We can't recover from this memory exception, so we'll
   // just terminate the app without any cleanup. Normally, an
   // an application should do everything it possibly can to
   // clean up properly and _not_ call AfxAbort().
   pEx->Delete();
   AfxAbort();
}
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
   pFile->Close();
   delete pFile;
}

CException::ReportError

Chiamare questa funzione membro per segnalare il testo dell'errore in una finestra di messaggio all'utente.

virtual int ReportError(
    UINT nType = MB_OK,
    UINT nMessageID = 0);

Parametri

nType
Specifica lo stile della finestra di messaggio. Applicare qualsiasi combinazione degli stili della finestra di messaggio alla casella. Se non si specifica questo parametro, il valore predefinito è MB_OK.

nMessageID
Specifica l'ID risorsa (voce di tabella stringa) di un messaggio da visualizzare se l'oggetto eccezione non ha un messaggio di errore. Se 0, viene visualizzato il messaggio "Non è disponibile alcun messaggio di errore".

Valore restituito

Valore AfxMessageBox ; in caso contrario, 0 se la memoria non è sufficiente per visualizzare la finestra di messaggio. Vedere AfxMessageBox per i possibili valori restituiti.

Esempio

Di seguito è riportato un esempio dell'uso di CException::ReportError. Per un altro esempio, vedere l'esempio per CATCH.

CFile fileInput;
CFileException ex;

// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.

// if the call to Open() fails, ex will be
// initialized with exception
// information.  the call to ex.ReportError() will
// display an appropriate
// error message to the user, such as
// "\Too\Many\Bad\Dirs.DAT contains an
// invalid path."  The error message text will be
// appropriate for the
// file name and error condition.

if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
  ex.ReportError();
}
else
{
  // the file was opened, so do whatever work
  // with fileInput we were planning...

  fileInput.Close();
}

Vedi anche

CObject Classe
Grafico della gerarchia
Elaborazione delle eccezioni