例外処理 : 例外の内容の調査

catch ブロックの引数にはほとんどのデータ型を指定できますが、MFC の関数は CException の派生クラスの例外をスローします。 したがって、MFC 関数がスローした例外をキャッチするには、CException オブジェクト (または、CMemoryException など、CException の派生クラスのオブジェクト) へのポインターを引数とする catch ブロックを作成する必要があります。 ポインターが指す例外オブジェクトのデータ メンバーを調べると、例外の発生原因を特定するための情報を得られます。

たとえば、CFileException 型の例外オブジェクトは、m_cause データ メンバーに、ファイル例外の原因を示す列挙型データを保持しています。 戻り値として、CFileException::fileNotFoundCFileException::readOnly などが返されます。

次に、CFileException の内容を調べる例を示します。 これ以外の例外型についても、同じように調べることができます。

try
{
   CFile file(_T("\\this_file_should_not_exist.dat"), CFile::modeRead);
}
catch( CFileException* theException )
{
   if( theException->m_cause == CFileException::fileNotFound )
      TRACE( "File not found\n" );
   theException->Delete();
}

詳細についてを参照してくださいの例外:例外オブジェクトの解放の例外:キャッチし、例外を削除する

参照

概念

例外処理 (MFC)