Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra i meccanismi di gestione delle eccezioni disponibili in MFC. Sono disponibili due meccanismi:
Eccezioni C++, disponibili in MFC versione 3.0 e successive
Macro di eccezione MFC, disponibili nelle versioni MFC 1.0 e successive
Se si scrive una nuova applicazione usando MFC, è consigliabile usare il meccanismo C++. È possibile usare il meccanismo basato su macro se l'applicazione esistente usa già questo meccanismo in modo esteso.
È possibile convertire facilmente il codice esistente per usare le eccezioni C++ anziché le macro delle eccezioni MFC. I vantaggi della conversione del codice e delle linee guida per questa operazione sono descritti nell'articolo Eccezioni: Conversione da macro di eccezioni MFC.
Se è già stata sviluppata un'applicazione usando le macro di eccezione MFC, è possibile continuare a usare queste macro nel codice esistente, usando le eccezioni C++ nel nuovo codice. L'articolo Eccezioni: modifiche alle macro eccezioni nella versione 3.0 fornisce linee guida per questa operazione.
Annotazioni
Per abilitare la gestione delle eccezioni C++ nel codice, selezionare Abilita eccezioni C++ nella pagina Generazione codice nella cartella C/C++ della finestra di dialogo Pagine delle proprietà del progetto oppure usare l'opzione del compilatore /EHsc .
Questo articolo illustra gli argomenti seguenti:
Quando usare le eccezioni
Durante l'esecuzione del programma possono verificarsi tre categorie di risultati: esecuzione normale, esecuzione errata o esecuzione anomala. Ogni categoria è descritta di seguito.
Esecuzione normale
La funzione può essere eseguita normalmente e restituita. Alcune funzioni restituiscono un codice di risultato al chiamante, che indica il risultato della funzione. I codici di risultato possibili sono definiti rigorosamente per la funzione e rappresentano l'intervallo di possibili risultati della funzione. Il codice del risultato può indicare l'esito positivo o negativo o può anche indicare un particolare tipo di errore compreso nell'intervallo normale di aspettative. Ad esempio, una funzione di stato del file può restituire un codice che indica che il file non esiste. Si noti che il termine "codice di errore" non viene usato perché un codice di risultato rappresenta uno dei molti risultati previsti.
Esecuzione errata
Il chiamante commette un errore nel passare argomenti alla funzione o chiama la funzione in un contesto inappropriato. Questa situazione causa un errore e deve essere rilevata da un'asserzione durante lo sviluppo del programma. Per altre informazioni sulle asserzioni, vedere Asserzioni C/C++.
Esecuzione anomala
L'esecuzione anomala include situazioni in cui le condizioni al di fuori del controllo del programma, ad esempio errori di I/O o di memoria insufficiente, influenzano il risultato della funzione. Le situazioni anomale devono essere gestite rilevando e generando eccezioni.
L'uso di eccezioni è particolarmente appropriato per l'esecuzione anomala.
Supporto eccezioni MFC
Se si usano direttamente le eccezioni C++ o si usano le macro di eccezione MFC, si userà la classe CException o CException
gli oggetti derivati che possono essere generati dal framework o dall'applicazione.
La tabella seguente illustra le eccezioni predefinite fornite da MFC.
Classe di eccezione | Significato |
---|---|
Classe CMemoryException | Memoria insufficiente |
Classe CFileException | Eccezione del file |
Classe CArchiveException | Eccezione di archiviazione/serializzazione |
Classe CNotSupportedException | Risposta alla richiesta di un servizio non supportato |
Classe CResourceException | Eccezione di allocazione delle risorse di Windows |
Classe CDaoException | Eccezioni di database (classi DAO) |
Classe CDBException | Eccezioni di database (classi ODBC) |
Classe COleException | Eccezioni OLE |
Classe COleDispatchException | Eccezioni di distribuzione (automazione) |
Classe CUserException | Eccezione che avvisa l'utente con una finestra di messaggio, quindi genera una classe CException generica |
A partire dalla versione 3.0, MFC ha usato eccezioni C++, ma supporta ancora le macro di gestione delle eccezioni meno recenti, simili alle eccezioni C++ nel formato. Anche se queste macro non sono consigliate per la nuova programmazione, sono ancora supportate per la compatibilità con le versioni precedenti. Nei programmi che usano già le macro è possibile usare liberamente anche le eccezioni C++. Durante la pre-elaborazione, le macro restituiscono le parole chiave di gestione delle eccezioni definite nell'implementazione MSVC del linguaggio C++ a partire da Visual C++ versione 2.0. È possibile lasciare presenti macro di eccezioni esistenti mentre si inizia a usare le eccezioni C++. Per informazioni sulla combinazione di macro e gestione delle eccezioni C++ e sulla conversione di codice precedente per l'uso del nuovo meccanismo, vedere gli articoli Eccezioni: Uso di macro MFC e eccezioni C++ e Eccezioni: Conversione da macro di eccezioni MFC. Le macro di eccezioni MFC precedenti, se le si usano ancora, si traducono in parole chiave di eccezione C++. Vedere Eccezioni: modifiche alle macro delle eccezioni nella versione 3.0. MFC non supporta direttamente i gestori di eccezioni strutturati (SEH) di Windows NT, come descritto in Structured Exception Handling.MFC does not directly support Windows NT structured exception handlers (SEH), come descritto in Structured Exception Handling.
Altre informazioni sulle eccezioni
Gli articoli seguenti illustrano l'uso della libreria MFC per la gestione delle eccezioni:
Gli articoli seguenti confrontano le macro di eccezione MFC con le parole chiave di eccezione C++ e spiegano come adattare il codice:
Vedere anche
Procedure consigliate C++ moderne per le eccezioni e la gestione degli errori