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_DYNAMIC
anche .
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 su Open Database Connectivity) |
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 THROW
macro , THROW_LAST
, try
catch
, 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 CException
e quindi usare CObject::IsKindOf
per distinguere tra CException
le 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 CException
classe 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 CException
classi 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à
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 CException
classe 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++- try
catch
. 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