Gestion des exceptions dans MFC
Cet article explique les mécanismes de gestion des exceptions disponibles dans MFC. Deux mécanismes sont disponibles :
Exceptions C++, disponibles dans MFC version 3.0 et ultérieures
Macros d’exception MFC, disponibles dans les versions 1.0 et ultérieures de MFC
Si vous écrivez une nouvelle application à l’aide de MFC, vous devez utiliser le mécanisme C++. Vous pouvez utiliser le mécanisme basé sur des macros si votre application existante utilise déjà ce mécanisme en grande partie.
Vous pouvez facilement convertir du code existant pour utiliser des exceptions C++ au lieu des macros d’exception MFC. Les avantages de la conversion de votre code et des instructions pour ce faire sont décrits dans l’article Exceptions : Conversion à partir de macros d’exception MFC.
Si vous avez déjà développé une application à l’aide des macros d’exception MFC, vous pouvez continuer à utiliser ces macros dans votre code existant, tout en utilisant des exceptions C++ dans votre nouveau code. L’article Exceptions : Les modifications apportées aux macros d’exception dans la version 3.0 donnent des instructions pour ce faire.
Remarque
Pour activer la gestion des exceptions C++ dans votre code, sélectionnez Activer les exceptions C++ dans la page Génération de code dans le dossier C/C++ de la boîte de dialogue Pages de propriétés du projet, ou utilisez l’option du compilateur /EHsc.
Cet article aborde les thèmes suivants :
Quand utiliser des exceptions
Trois catégories de résultats peuvent se produire lorsqu’une fonction est appelée pendant l’exécution du programme : exécution normale, exécution erronée ou exécution anormale. Chaque catégorie est décrite ci-dessous.
Exécution normale
La fonction peut s’exécuter normalement et retourner. Certaines fonctions retournent un code de résultat à l’appelant, ce qui indique le résultat de la fonction. Les codes de résultat possibles sont strictement définis pour la fonction et représentent la plage des résultats possibles de la fonction. Le code de résultat peut indiquer la réussite ou l’échec ou même indiquer un type particulier d’échec qui se trouve dans la plage normale des attentes. Par exemple, une fonction d’état de fichier peut retourner un code qui indique que le fichier n’existe pas. Notez que le terme « code d’erreur » n’est pas utilisé, car un code de résultat représente l’un des nombreux résultats attendus.
Exécution erronée
L’appelant fait une erreur lors du passage d’arguments à la fonction ou appelle la fonction dans un contexte inapproprié. Cette situation provoque une erreur et doit être détectée par une assertion pendant le développement du programme. (Pour plus d’informations sur les assertions, consultez Assertions C/C++.)
Exécution anormale
L’exécution anormale comprend des situations où les conditions extérieures au contrôle du programme, telles que des erreurs d’E/S ou de mémoire insuffisante, influencent le résultat de la fonction. Les situations anormales doivent être gérées en interceptant et en lançant des exceptions.
L’utilisation d’exceptions est particulièrement appropriée pour l’exécution anormale.
Prise en charge des exceptions MFC
Que vous utilisiez directement les exceptions C++ ou que vous utilisiez les macros d’exception MFC, vous utiliserez la classe CException ou CException
les objets dérivés qui peuvent être levées par l’infrastructure ou par votre application.
Le tableau suivant présente les exceptions prédéfinies fournies par MFC.
Exception (classe) | Signification |
---|---|
CMemoryException, classe | Mémoire insuffisante |
CFileException, classe | Exception de fichier |
CArchiveException, classe | Exception archive/sérialisation |
CNotSupportedException, classe | Réponse à la demande de service non pris en charge |
CResourceException, classe | Exception d’allocation de ressources Windows |
CDaoException, classe | Exceptions de base de données (classes DAO) |
CDBException, classe | Exceptions de base de données (classes ODBC) |
COleException, classe | exceptions OLE |
COleDispatchException, classe | Exceptions dispatch (automation) |
CUserException, classe | Exception qui alerte l’utilisateur avec une boîte de message, puis lève une classe CException générique |
Depuis la version 3.0, MFC utilise des exceptions C++ mais prend toujours en charge les macros plus anciennes de gestion des exceptions, qui sont similaires aux exceptions C++ en termes de format. Bien que ces macros ne soient pas recommandées pour une nouvelle programmation, elles sont toujours prises en charge pour la compatibilité descendante. Dans les programmes qui utilisent déjà les macros, vous pouvez également utiliser des exceptions C++. Pendant le prétraitement, les macros évaluent les mot clé de gestion des exceptions définies dans l’implémentation MSVC du langage C++ à partir de Visual C++ version 2.0. Vous pouvez laisser les macros des exceptions existantes telles qu'elles sont lorsque vous commencez à utiliser des exceptions C++. Pour plus d’informations sur la combinaison de macros et de gestion des exceptions C++ et sur la conversion d’ancien code pour utiliser le nouveau mécanisme, consultez les articles Exceptions : Utilisation de macros MFC et exceptions C++ : conversion à partir de macros d’exception MFC. Les anciennes macros d'exceptions MFC, si vous les utilisez toujours, correspondent aux mots clés d'exception C++. Voir Exceptions : Modifications apportées aux macros d’exception dans la version 3.0. MFC ne prend pas directement en charge les gestionnaires d’exceptions structurées Windows NT (SEH), comme indiqué dans La gestion des exceptions structurées.
En savoir plus sur les exceptions
Les articles suivants expliquent l’utilisation de la bibliothèque MFC pour la gestion des exceptions :
Les articles suivants comparent les macros d’exception MFC à l’exception C++ mot clé s et expliquent comment adapter votre code :
Voir aussi
Meilleures pratiques C++ modernes pour la gestion des exceptions et des erreurs