Lire en anglais

Partager via


La classe CException

Classe de base pour toutes les exceptions dans la bibliothèque MFC (Microsoft Foundation Class).

Syntaxe

class AFX_NOVTABLE CException : public CObject

Membres

Constructeurs publics

Nom Description
CException::CException Construit un objet CException.

Méthodes publiques

Nom Description
CException::Delete Supprime un CException objet.
CException::ReportError Signale un message d’erreur dans une boîte de message à l’utilisateur.

Notes

Comme CException il s’agit d’une classe de base abstraite, vous ne pouvez pas créer CException d’objets directement ; vous devez créer des objets de classes dérivées. Si vous devez créer votre propre CExceptionclasse -style, utilisez l’une des classes dérivées répertoriées ci-dessus en tant que modèle. Assurez-vous que votre classe dérivée utilise IMPLEMENT_DYNAMICégalement .

Les classes dérivées et leurs descriptions sont répertoriées ci-dessous :

Nom Description
CSimpleException Classe de base pour les exceptions MFC critiques pour les ressources
CInvalidArgException Condition d’exception d’argument non valide
CMemoryException Exception hors mémoire
CNotSupportedException Demande d’une opération non prise en charge
CArchiveException Exception spécifique à l’archive
CFileException Exception spécifique au fichier
CResourceException Ressource Windows introuvable ou non créatable
COleException Exception OLE
CDBException Exception de base de données (autrement dit, conditions d’exception découlant des classes de base de données MFC basées sur Open Database Connectivity)
COleDispatchException Exception ole dispatch (automation)
CUserException Exception qui indique qu’une ressource n’a pas pu être trouvée
CDaoException Exception d’objet d’accès aux données (autrement dit, conditions d’exception découlant des classes DAO)
CInternetException Exception Internet (autrement dit, conditions d’exception découlant des classes Internet).

Ces exceptions sont destinées à être utilisées avec les THROWmacros , and_catchTHROW_LASTtrycatchend_catch Pour plus d’informations sur les exceptions, consultez Traitement des exceptions ou consultez l’article Gestion des exceptions (MFC).

Pour intercepter une exception spécifique, utilisez la classe dérivée appropriée. Pour intercepter tous les types d’exceptions, utilisez CException, puis utilisez CObject::IsKindOf pour différencier les CExceptionclasses dérivées. Notez que CObject::IsKindOf cela fonctionne uniquement pour les classes déclarées avec la macro, afin de tirer parti de la IMPLEMENT_DYNAMIC vérification de type dynamique. Toute CExceptionclasse dérivée que vous créez doit également utiliser la IMPLEMENT_DYNAMIC macro.

Vous pouvez signaler des détails sur les exceptions à l’utilisateur en appelant ou en appelant GetErrorMessage ou ReportError, deux fonctions membres qui fonctionnent avec l’une des classes dérivées.CException

Si une exception est interceptée par l’une des macros, l’objet CException est supprimé automatiquement ; ne le supprimez pas vous-même. Si une exception est interceptée à l’aide d’un catch mot clé, elle n’est pas automatiquement supprimée. Consultez l’article Gestion des exceptions (MFC) pour plus d’informations sur la suppression d’un objet d’exception.

Hiérarchie d'héritage

CObject

CException

Spécifications

En-tête : afx.h

CException::CException

Cette fonction membre construit un CException objet.

explicit CException(BOOL bAutoDelete);

Paramètres

b_AutoDelete
Spécifiez TRUE si la mémoire de l’objet CException a été allouée sur le tas. Cela entraîne la suppression de l’objet CException lorsque la Delete fonction membre est appelée pour supprimer l’exception. Spécifiez FALSE si l’objet CException se trouve sur la pile ou s’il s’agit d’un objet global. Dans ce cas, l’objet CException ne sera pas supprimé lorsque la Delete fonction membre est appelée.

Notes

Normalement, vous n’avez jamais besoin d’appeler ce constructeur directement. Une fonction qui lève une exception doit créer une instance d’une CExceptionclasse dérivée et appeler son constructeur, ou elle doit utiliser l’une des fonctions levées MFC, telles que AfxThrowFileException, pour lever un type prédéfini. Cette documentation n’est fournie qu’à des fins d’exhaustivité.

CException::Delete

Cette fonction vérifie si l’objet CException a été créé sur le tas et, le cas échéant, il appelle l’opérateur delete sur l’objet.

void Delete();

Notes

Lors de la suppression d’un CException objet, utilisez la Delete fonction membre pour supprimer l’exception. N’utilisez pas directement l’opérateur delete , car l’objet CException peut être un objet global ou a été créé sur la pile.

Vous pouvez spécifier si l’objet doit être supprimé lorsque l’objet est construit. Pour plus d’informations, consultez CException::CException.

Vous n’avez besoin d’appeler Delete que si vous utilisez le mécanisme C++- trycatch. Si vous utilisez les macros MFC et CATCHque ces macros TRY appellent automatiquement cette fonction.

Exemple

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

Appelez cette fonction membre pour signaler le texte d’erreur dans une boîte de message à l’utilisateur.

virtual int ReportError(
    UINT nType = MB_OK,
    UINT nMessageID = 0);

Paramètres

nType
Spécifie le style de la zone de message. Appliquez n’importe quelle combinaison des styles de boîte de message à la zone. Si vous ne spécifiez pas ce paramètre, la valeur par défaut est MB_OK.

nMessageID
Spécifie l’ID de ressource (entrée de table de chaîne) d’un message à afficher si l’objet exception n’a pas de message d’erreur. Si 0, le message « Aucun message d’erreur n’est disponible » s’affiche.

Valeur de retour

Valeur AfxMessageBox ; sinon, 0 s’il n’y a pas suffisamment de mémoire pour afficher la boîte de message. Consultez AfxMessageBox les valeurs de retour possibles.

Exemple

Voici un exemple d’utilisation de CException::ReportError. Pour obtenir un autre exemple, consultez l’exemple pour 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();
}

Voir aussi

CObject Classe
Graphique hiérarchique
Traitement des exceptions