La classe CException
Classe de base pour toutes les exceptions dans la bibliothèque MFC (Microsoft Foundation Class).
class AFX_NOVTABLE CException : public CObject
Nom | Description |
---|---|
CException::CException |
Construit un objet CException . |
Nom | Description |
---|---|
CException::Delete |
Supprime un CException objet. |
CException::ReportError |
Signale un message d’erreur dans une boîte de message à l’utilisateur. |
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 CException
classe -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 THROW
macros , and_catch
THROW_LAST
try
catch
end_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 CException
classes 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 CException
classe 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.
CException
En-tête : afx.h
Cette fonction membre construit un CException
objet.
explicit CException(BOOL bAutoDelete);
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.
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 CException
classe 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é.
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();
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++- try
catch
. Si vous utilisez les macros MFC et CATCH
que ces macros TRY
appellent automatiquement cette fonction.
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;
}
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);
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 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.
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();
}
CObject
Classe
Graphique hiérarchique
Traitement des exceptions