例外処理 : 例外の内容の調査
catch ブロックの引数にはほとんどのデータ型を指定できますが、MFC の関数は CException の派生クラスの例外をスローします。 したがって、MFC 関数がスローした例外をキャッチするには、CException オブジェクト (または、CMemoryException など、CException の派生クラスのオブジェクト) へのポインターを引数とする catch ブロックを作成する必要があります。 ポインターが指す例外オブジェクトのデータ メンバーを調べると、例外の発生原因を特定するための情報を得られます。
たとえば、CFileException 型の例外オブジェクトは、m_cause データ メンバーに、ファイル例外の原因を示す列挙型データを保持しています。 戻り値として、CFileException::fileNotFound や CFileException::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();
}
詳細についてを参照してくださいの例外:例外オブジェクトの解放 と の例外:キャッチし、例外を削除する。