Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La classe
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
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