Gestione delle eccezioni in MFC
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.
Nota
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 include 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.
Exception (classe) | Significato |
---|---|
Classe CMemoryException | Memoria insufficiente |
Classe CFileException | Eccezione 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 | OLE (eccezioni) |
Classe COleDispatchException | Eccezioni dispatch (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, MCF utilizza le eccezioni C++, ma supporta ancora le precedenti macro di gestione delle eccezioni, che sono simili, nella forma, alle eccezioni C++. Sebbene per la creazione di nuovi programmi non sia consigliato utilizzare tali macro, le stesse sono ancora supportate per garantire la compatibilità con le versioni precedenti. Nei programmi che già utilizzano 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 le macro di gestione delle eccezioni esistenti al loro posto, quando si inizia a utilizzare 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 e eccezioni C++: Conversione da macro di eccezioni MFC. Le macro delle eccezioni MFC precedenti, se ancora utilizzate, restituiscono parole chiave delle eccezioni C++. Vedere Eccezioni: modifiche alle macro delle eccezioni nella versione 3.0. MFC non supporta direttamente i gestori di eccezioni strutturati di Windows NT (edizione Standard H), come descritto in Gestione delle eccezioni strutturate.
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:
Vedi anche
Procedure consigliate C++ moderne per le eccezioni e la gestione degli errori