CATCH

定义捕获在前面的 TRY 引发的第一个异常类型的代码块。

CATCH(exception_class, exception_object_pointer_name )

参数

  • exception_class
    指定异常类型测试。 有关标准异常类的列表,请参见类 CException

  • exception_object_pointer_name
    将由宏创建的异常对象指针指定名称。 您可以使用指针名称到 CATCH 中的异常对象块的访问。 此变量为您声明。

备注

异常处理代码可能询问异常对象,因此,如果需要,获取有关异常的特定原因的更多信息。 调用 THROW_LAST 宏转换过程。下外部异常帧。 关闭 TRYEND_CATCH 宏。

如果 exception_class 是类 CException,则所有异常类型将捕获。 可以使用 CObject::IsKindOf 成员函数确定特定已引发异常。 一种更好的方式捕获若干异常将使用的 AND_CATCH 语句,每个与不同的异常类型。

异常对象指针由宏创建的。 您不需要声明其您。

备注

CATCH 块定义为大括号描述的 c. C++ 范围。如果声明此范围的变量,它们在该范围内身份验证的用户访问。这同样适用于 exception_object_pointer_name

有关异常和 CATCH 宏的更多信息,请参见中的文章 例外

示例

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;
}

要求

Header: afx.h

请参见

参考

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException 类

概念

MFC宏和Globals