Partager via


CATCH

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

CATCH(exception_class, exception_object_pointer_name )

Paramètres

  • exception_class
    Spécifie le type d'exception pour déterminer.Pour obtenir une liste des classes standard d'exceptions, consultez la classe CException.

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

Notes

Le code exception-traitant 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 d' THROW_LAST pour déplacer le traitement au frame externe suivant d'exception.Terminez le bloc de TRY avec une macro d' END_CATCH .

Si les exception_class est la classe CException, tous les types d'exceptions seront interceptés.Vous pouvez utiliser la fonction membre de CObject::IsKindOf pour déterminer l'exception a été levée.Une meilleure façon d'intercepter plusieurs types d'exceptions est d'utiliser des instructions séquentielles d' 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 la déclarer vous-même.

[!REMARQUE]

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

Pour plus d'informations sur les exceptions et le 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

Header: afx.h

Voir aussi

Référence

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException, classe

Concepts

Macro MFC et Globals