Partager via


CATCH

Définit un bloc de code qui intercepte le premier type d'exception levé dans le bloc TRY précédent.

CATCH(exception_class, exception_object_pointer_name )

Paramètres

  • classe d'exception
    Spécifie le type d'exception à tester. Pour une liste des classes standard d'exception, consultez la classe CException.

  • exception_object_pointer_name
    Spécifie le nom du pointeur de l'objet exception qui est créé par la macro. Vous pouvez utiliser le nom du pointeur pour accéder à l'objet exception dans le bloc CATCH. Cette variable est déclarée pour vous.

Notes

Le code d'exception- PROCESSING peut interroger l'objet exception, le cas échéant, pour obtenir plus d'informations sur la cause spécifique de l'exception. Appelez la macro THROW_LAST pour déplacer le traitement vers le prochain cadre externe d'exception. Fermez le bloc de TRY avec une macro de END_CATCH.

Si les exception_class est la classe CException, tous les types d'exception sont interceptés. Vous pouvez utiliser la fonction membre CObject::IsKindOf pour déterminer quelle exception spécifique a été levée. Une meilleure méthode pour intercepter plusieurs types d'exceptions consiste à utiliser les instructions séquentielles AND_CATCH, chacune avec un type d'exception différent.

Le pointeur d'objet exception est créé par la macro. Vous n"avez pas besoin de le déclarer vous même.

Notes

Le bloc CATCH est défini comme une portée C ++ (délimité par des accolades).Si vous déclarez des variables dans cette étendue, elles sont accessibles uniquement dans cette étendue.Cela s'applique également à l'exception_object_pointer_name.

Pour plus d'informations sur les exceptions et la macro de CATCH, consultez l'article Exceptions.

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.
TRY
{
   pFile = new CFile(_T( "C:\\WINDOWS\\SYSTEM.INI"), 
      CFile::modeRead | CFile::shareDenyNone);
   ULONGLONG dwLength = pFile->GetLength();
   CString str;
   str.Format(_T("Your SYSTEM.INI file is %I64u bytes long.") , dwLength);
   AfxMessageBox(str);
}
CATCH(CFileException, pEx)
{
   // Simply show an error message to the user.
   pEx->ReportError();
}
AND_CATCH(CMemoryException, pEx)
{
   // We can't recover from this memory exception, so we'll 
   // just terminate the app without any cleanup. Normally,  
   // an application should do everything it possibly can to 
   // clean up properly and not call AfxAbort().
   AfxAbort();
}
END_CATCH
// 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 cleanup code needs to test for NULL. 
if (pFile != NULL)
{
   pFile->Close();
   delete pFile;
}

Configuration requise

En-tête : afx.h

Voir aussi

Référence

ESSAI

AND_CATCH

END_CATCH

JET (MFC)

THROW_LAST

CATCH_ALL

CException, classe

Concepts

macro MFC et Globals