CException クラスCException Class

MFC (Microsoft Foundation Class) ライブラリ内のすべての例外に関する基底クラスです。The base class for all exceptions in the Microsoft Foundation Class Library.

構文Syntax

class AFX_NOVTABLE CException : public CObject

メンバーMembers

パブリック コンストラクターPublic Constructors

名前Name 説明Description
CException:: CExceptionCException::CException CException オブジェクトを構築します。Constructs a CException object.

パブリック メソッドPublic Methods

名前Name 説明Description
CException::D e)CException::Delete オブジェクトを削除 CException します。Deletes a CException object.
CException:: ReportErrorCException::ReportError メッセージボックス内のエラーメッセージをユーザーに報告します。Reports an error message in a message box to the user.

解説Remarks

CExceptionは抽象基本クラスであるため、オブジェクトを直接作成することはできません。 CException 派生クラスのオブジェクトを作成する必要があります。Because CException is an abstract base class you cannot create CException objects directly; you must create objects of derived classes. 独自のスタイルのクラスを作成する必要がある場合は CException 、上記の派生クラスのいずれかをモデルとして使用します。If you need to create your own CException-style class, use one of the derived classes listed above as a model. 派生クラスでもが使用されていることを確認し IMPLEMENT_DYNAMIC ます。Make sure that your derived class also uses IMPLEMENT_DYNAMIC.

派生クラスとその説明を次に示します。The derived classes and their descriptions are listed below:

名前Name 説明Description
CSimpleExceptionCSimpleException リソースクリティカルな MFC 例外の基底クラスです。A base class for resource-critical MFC exceptions
CInvalidArgExceptionCInvalidArgException 無効な引数の例外条件Invalid argument exception condition
CMemoryExceptionCMemoryException メモリ不足の例外Out-of-memory exception
CNotSupportedExceptionCNotSupportedException サポートされていない操作の要求Request for an unsupported operation
CArchiveExceptionCArchiveException アーカイブ固有の例外Archive-specific exception
CFileExceptionCFileException ファイル固有の例外File-specific exception
CResourceExceptionCResourceException Windows リソースが見つからないか、作成できませんWindows resource not found or not creatable
COleExceptionCOleException OLE 例外OLE exception
CDBExceptionCDBException データベース例外 (Open Database Connectivity に基づく MFC データベースクラスで発生する例外条件)Database exception (that is, exception conditions arising for MFC database classes based on Open Database Connectivity)
COleDispatchExceptionCOleDispatchException OLE ディスパッチ (オートメーション) の例外OLE dispatch (automation) exception
CUserExceptionCUserException リソースが見つからなかったことを示す例外Exception that indicates that a resource could not be found
CDaoExceptionCDaoException データアクセスオブジェクトの例外 (DAO クラスで発生する例外条件)Data access object exception (that is, exception conditions arising for DAO classes)
CInternetExceptionCInternetException インターネット例外 (インターネットクラスで発生する例外条件)。Internet exception (that is, exception conditions arising for Internet classes).

これらの例外は、 THROWTHROW_LASTtrycatchand_catch、および end_catch マクロと共に使用することを意図しています。These exceptions are intended to be used with the THROW, THROW_LAST, try, catch, and_catch, and end_catch macros. 例外の詳細については、「 例外処理」を参照するか、「 例外処理 (MFC)」を参照してください。For more information on exceptions, see Exception Processing, or see the article Exception Handling (MFC).

特定の例外をキャッチするには、適切な派生クラスを使用します。To catch a specific exception, use the appropriate derived class. すべての種類の例外をキャッチするには CException 、を使用してから、 CObject:: IsKindOf を使用して、派生クラスを区別し CException ます。To catch all types of exceptions, use CException, and then use CObject::IsKindOf to differentiate among CException-derived classes. は、 CObject::IsKindOf 動的な型チェックを利用するために、 IMPLEMENT_DYNAMIC マクロで宣言されたクラスに対してのみ機能することに注意してください。Note that CObject::IsKindOf works only for classes declared with the IMPLEMENT_DYNAMIC macro, in order to take advantage of dynamic type checking. CException作成する任意の派生クラスでもマクロを使用する必要があり IMPLEMENT_DYNAMIC ます。Any CException-derived class that you create should use the IMPLEMENT_DYNAMIC macro, too.

GetErrorMessageまたはReportErrorを呼び出すことによって、ユーザーに例外の詳細を報告できます。この場合、の派生クラスのいずれかを操作する2つのメンバー関数が使用さ CException れます。You can report details about exceptions to the user by calling GetErrorMessage or ReportError, two member functions that work with any of CException's derived classes.

マクロのいずれかによって例外がキャッチされると、 CException オブジェクトは自動的に削除されます。自分で削除しないでください。If an exception is caught by one of the macros, the CException object is deleted automatically; do not delete it yourself. キーワードを使用して例外がキャッチされた場合 catch 、その例外は自動的に削除されません。If an exception is caught by using a catch keyword, it is not automatically deleted. どのような場合にオブジェクトを削除するかの詳細については、「 例外処理 (MFC) 」を参照してください。See the article Exception Handling (MFC) for more information about when to delete an exeption object.

継承階層Inheritance Hierarchy

CObjectCObject

CException

必要条件Requirements

ヘッダー: afxHeader: afx.h

CException:: CExceptionCException::CException

このメンバー関数は、 CException オブジェクトを構築します。This member function constructs a CException object.

explicit CException(BOOL bAutoDelete);

パラメーターParameters

b_AutoDeleteb_AutoDelete
オブジェクトのメモリが CException ヒープに割り当てられている場合は TRUE を指定します。Specify TRUE if the memory for the CException object has been allocated on the heap. これにより、 CException Delete 例外を削除するためにメンバー関数が呼び出されたときに、オブジェクトが削除されます。This will cause the CException object to be deleted when the Delete member function is called to delete the exception. CExceptionオブジェクトがスタック上にあるか、またはグローバルオブジェクトである場合は、FALSE を指定します。Specify FALSE if the CException object is on the stack or is a global object. この場合、メンバー関数が呼び出されても、 CException オブジェクトは削除されません DeleteIn this case, the CException object will not be deleted when the Delete member function is called.

解説Remarks

通常、このコンストラクターを直接呼び出す必要はありません。You would normally never need to call this constructor directly. 例外をスローする関数は、派生クラスのインスタンスを作成 CException してそのコンストラクターを呼び出す必要があります。または、 AfxThrowFileExceptionなどの MFC スロー関数のいずれかを使用して、定義済みの型をスローする必要があります。A function that throws an exception should create an instance of a CException-derived class and call its constructor, or it should use one of the MFC throw functions, such as AfxThrowFileException, to throw a predefined type. このドキュメントは、完全を期すためだけに提供されています。This documentation is provided only for completeness.

CException::D e)CException::Delete

この関数は、オブジェクトがヒープ上に作成されたかどうかを確認 CException し、存在する場合は、 delete オブジェクトに対して演算子を呼び出します。This function checks to see if the CException object was created on the heap, and if so, it calls the delete operator on the object.

void Delete();

解説Remarks

オブジェクトを削除する場合は、 CException メンバー関数を使用し Delete て例外を削除します。When deleting a CException object, use the Delete member function to delete the exception. delete CException オブジェクトはグローバルオブジェクトであるか、またはスタック上に作成されている可能性があるため、演算子を直接使用しないでください。Do not use the delete operator directly, because the CException object may be a global object or have been created on the stack.

オブジェクトを構築するときにオブジェクトを削除するかどうかを指定できます。You can specify whether the object should be deleted when the object is constructed. 詳細については、「 CException:: CException」を参照してください。For more information, see CException::CException.

Delete 、C++ 機構を使用している場合にのみ呼び出す必要があり try - catch ます。You only need to call Delete if you are using the C++ try- catch mechanism. MFC マクロを使用している場合、Try と CATCH実行 すると、これらのマクロは自動的にこの関数を呼び出します。If you are using the MFC macros TRY and CATCH, then these macros will automatically call this function.

Example

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.
// Note that this example performs the same actions as the
// example for CATCH, but uses C++ try/catch syntax instead
// of using the MFC TRY/CATCH macros. This sample must use
// CException::Delete() to delete the exception objects
// before closing the catch block, while the CATCH example
// implicitly performs the deletion via the macros.
try
{
   pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
      CFile::modeRead | CFile::shareDenyNone);
   ULONGLONG ullLength = pFile->GetLength();
   CString str;
   str.Format(_T("Your SYSTEM.INI file is %u bytes long."), ullLength);
   AfxMessageBox(str);
}
catch(CFileException* pEx)
{
   // Simply show an error message to the user.
   pEx->ReportError();
   pEx->Delete();
}
catch(CMemoryException* pEx)
{
   // We can't recover from this memory exception, so we'll
   // just terminate the app without any cleanup. Normally, an
   // an application should do everything it possibly can to
   // clean up properly and _not_ call AfxAbort().
   pEx->Delete();
   AfxAbort();
}
// If an exception occurrs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
   pFile->Close();
   delete pFile;
}

CException:: ReportErrorCException::ReportError

このメンバー関数を呼び出して、メッセージボックス内のエラーテキストをユーザーに報告します。Call this member function to report error text in a message box to the user.

virtual int ReportError(
    UINT nType = MB_OK,
    UINT nMessageID = 0);

パラメーターParameters

nTypenType
メッセージボックスのスタイルを指定します。Specifies the style of the message box. メッセージボックススタイルの任意の組み合わせをボックスに適用します。Apply any combination of the message-box styles to the box. このパラメーターを指定しない場合、既定値は MB_OK になります。If you don't specify this parameter, the default is MB_OK.

nMessageIDnMessageID
例外オブジェクトにエラーメッセージがない場合に表示するメッセージのリソース ID (文字列テーブルエントリ) を指定します。Specifies the resource ID (string table entry) of a message to display if the exception object does not have an error message. 0の場合は、"エラーメッセージがありません" というメッセージが表示されます。If 0, the message "No error message is available" is displayed.

戻り値Return Value

AfxMessageBox値。メッセージボックスを表示するのに十分なメモリがない場合は0。An AfxMessageBox value; otherwise 0 if there is not enough memory to display the message box. 返される可能性のある戻り値については、 AfxMessageBox を参照してください。See AfxMessageBox for the possible return values.

Example

の使用例を次に示し CException::ReportError ます。Here is an example of the use of CException::ReportError. 別の例については、 CATCHの例を参照してください。For another example, see the example for CATCH.

CFile fileInput;
CFileException ex;

// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.

// if the call to Open() fails, ex will be
// initialized with exception
// information.  the call to ex.ReportError() will
// display an appropriate
// error message to the user, such as
// "\Too\Many\Bad\Dirs.DAT contains an
// invalid path."  The error message text will be
// appropriate for the
// file name and error condition.

if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
  ex.ReportError();
}
else
{
  // the file was opened, so do whatever work
  // with fileInput we were planning...

  fileInput.Close();
}

関連項目See also

CObject クラスCObject Class
階層図Hierarchy Chart
例外処理Exception Processing