Partager via


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 CExceptionles 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