共用方式為


CATCH

定義攔截上述 TRY 區塊中擲回的第一個例外狀況型別的程式碼區塊。

CATCH(exception_class, exception_object_pointer_name )

參數

  • exception 類別
    指定例外狀況類型來測試。 如需標準例外狀況類別清單,請參閱 CException

  • exception_object_pointer_name
    指定將由巨集所建立的例外狀況物件指標的名稱。 您可以使用指標名稱在 CATCH 存取區塊中的例外狀況物件。 這個變數為您宣告。

備註

例外狀況處理的程式碼可以查詢例外狀況物件,如果可行,取得例外狀況的特定原因的詳細資訊。 叫用 THROW_LAST 巨集將處理到下外部例外狀況框架。 結束 END_CATCH 的巨集的 TRY 區塊。

如果 exception_class 是類別 CException,則所有例外狀況類型會被攔截。 您可以使用 CObject::IsKindOf 成員函式判斷特定例外狀況擲回。 較佳的數種方式攔截例外狀況時要使用的 AND_CATCH 陳述式,每個與其他例外狀況型別。

例外狀況物件指標由巨集所建立。 您就不需要自己宣告它。

注意事項注意事項

CATCH 區塊定義為 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;
}

需求

標頭: afx.h

請參閱

參考

TRY

AND_CATCH

END_CATCH

THROW (MFC)

THROW_LAST

CATCH_ALL

CException 類別

概念

MFC 巨集和全域