例外処理Exception Processing

プログラムを実行すると、多くの異常な状態と "例外" と呼ばれるエラーが発生する可能性があります。When a program executes, a number of abnormal conditions and errors called "exceptions" can occur. これには、メモリ不足、リソース割り当てエラー、およびファイルの検索エラーが含まれます。These may include running out of memory, resource allocation errors, and failure to find files.

この Microsoft Foundation Class ライブラリでは、C++ の ANSI 規格委員会によって提案されたものを厳密にモデル化した例外処理スキームを使用します。The Microsoft Foundation Class Library uses an exception-handling scheme that is modeled closely after the one proposed by the ANSI standards committee for C++. 異常な状況が発生する可能性のある関数を呼び出す前に、例外ハンドラーを設定する必要があります。An exception handler must be set up before calling a function that may encounter an abnormal situation. 関数で異常な状態が発生した場合、例外がスローされ、制御が例外ハンドラーに渡されます。If the function encounters an abnormal condition, it throws an exception and control is passed to the exception handler.

Microsoft Foundation Class ライブラリに含まれるいくつかのマクロでは、例外ハンドラーが設定されます。Several macros included with the Microsoft Foundation Class Library will set up exception handlers. 他の多くのグローバル関数は、必要に応じて、特殊な例外をスローしたり、プログラムを終了したりするのに役立ちます。A number of other global functions help to throw specialized exceptions and terminate programs, if necessary. これらのマクロとグローバル関数は、次のカテゴリに分類されます。These macros and global functions fall into the following categories:

  • 例外ハンドラーを構成する例外マクロ。Exception macros, which structure your exception handler.

  • 例外スロー関数)。特定の型の例外を生成します。Exception-throwing functions), which generate exceptions of specific types.

  • 終了関数。これにより、プログラムが終了します。Termination functions, which cause program termination.

例と詳細については、「 例外」を参照してください。For examples and more details, see the article Exceptions.

例外マクロException Macros

名前Name 説明Description
やり直しTRY 例外処理のコードブロックを指定します。Designates a block of code for exception processing.
できれCATCH 前の TRY ブロックから例外をキャッチするためのコードブロックを指定します。Designates a block of code for catching an exception from the preceding TRY block.
CATCH_ALLCATCH_ALL 前の TRY ブロックからのすべての例外をキャッチするコードブロックを指定します。Designates a block of code for catching all exceptions from the preceding TRY block.
AND_CATCHAND_CATCH 前の TRY ブロックから追加の例外の種類をキャッチするためのコードブロックを指定します。Designates a block of code for catching additional exception types from the preceding TRY block.
AND_CATCH_ALLAND_CATCH_ALL 前の TRY ブロックでスローされた他のすべての例外の種類をキャッチするためのコードブロックを指定します。Designates a block of code for catching all other additional exception types thrown in a preceding TRY block.
END_CATCHEND_CATCH 最後の CATCH または AND_CATCH コードブロックを終了します。Ends the last CATCH or AND_CATCH code block.
END_CATCH_ALLEND_CATCH_ALL 最後の CATCH_ALL コードブロックを終了します。Ends the last CATCH_ALL code block.
THROWTHROW 指定された例外をスローします。Throws a specified exception.
THROW_LASTTHROW_LAST 現在処理されている例外を次の外部ハンドラーにスローします。Throws the currently handled exception to the next outer handler.

Exception-Throwing 関数Exception-Throwing Functions

名前Name 説明Description
AfxThrowArchiveExceptionAfxThrowArchiveException アーカイブの例外をスローします。Throws an archive exception.
AfxThrowFileExceptionAfxThrowFileException ファイル例外をスローします。Throws a file exception.
AfxThrowInvalidArgExceptionAfxThrowInvalidArgException 無効な引数の例外をスローします。Throws an invalid argument exception.
AfxThrowMemoryExceptionAfxThrowMemoryException メモリ例外をスローします。Throws a memory exception.
AfxThrowNotSupportedExceptionAfxThrowNotSupportedException サポートされていない例外をスローします。Throws a not-supported exception.
AfxThrowResourceExceptionAfxThrowResourceException Windows リソース-検出されない例外をスローします。Throws a Windows resource-not-found exception.
AfxThrowUserExceptionAfxThrowUserException ユーザーが開始したプログラムアクションで例外をスローします。Throws an exception in a user-initiated program action.

MFC には、OLE 例外専用の次の2つの例外スロー関数が用意されています。MFC provides two exception-throwing functions specifically for OLE exceptions:

OLE 例外関数OLE Exception Functions

名前Name 説明Description
AfxThrowOleDispatchExceptionAfxThrowOleDispatchException OLE オートメーション関数内で例外をスローします。Throws an exception within an OLE automation function.
AfxThrowOleExceptionAfxThrowOleException OLE 例外をスローします。Throws an OLE exception.

データベースの例外をサポートするために、データベースクラスには、とという2つの例外クラス CDBException CDaoException と、例外の種類をサポートするためのグローバル関数が用意されています。To support database exceptions, the database classes provide two exception classes, CDBException and CDaoException, and global functions to support the exception types:

DAO 例外関数DAO Exception Functions

名前Name 説明Description
AfxThrowDAOExceptionAfxThrowDAOException 独自のコードから CDaoException をスローします。Throws a CDaoException from your own code.
AfxThrowDBExceptionAfxThrowDBException 独自のコードから CDBException をスローします。Throws a CDBException from your own code.

MFC には、次の終了関数が用意されています。MFC provides the following termination function:

終了関数Termination Functions

名前Name 説明Description
AfxAbortAfxAbort 致命的なエラーが発生したときにアプリケーションを終了するために呼び出されます。Called to terminate an application when a fatal error occurs.

やり直しTRY

TRY ブロックを設定します。Sets up a TRY block.

TRY

解説Remarks

TRY ブロックは、例外をスローする可能性のあるコードのブロックを識別します。A TRY block identifies a block of code that might throw exceptions. これらの例外は、次の CATCH および AND_CATCH ブロックで処理されます。Those exceptions are handled in the following CATCH and AND_CATCH blocks. 再帰が許可されています。例外を無視するか、THROW_LAST マクロを使用して、外側の TRY ブロックに例外を渡すことができます。Recursion is allowed: exceptions may be passed to an outer TRY block, either by ignoring them or by using the THROW_LAST macro. END_CATCH または END_CATCH_ALL マクロを使用し て、TRY ブロックを終了します。End the TRY block with an END_CATCH or END_CATCH_ALL macro.

詳細については、「 例外」を参照してください。For more information, see the article Exceptions.

Example

CATCHの例を参照してください。See the example for CATCH.

要件Requirements

ヘッダー: afx.hHeader: afx.h

できれCATCH

前の TRY ブロックでスローされた最初の例外の種類をキャッチするコードブロックを定義します。Defines a block of code that catches the first exception type thrown in the preceding TRY block.

CATCH(exception_class, exception_object_pointer_name)

パラメーターParameters

exception_classexception_class
テストする例外の種類を指定します。Specifies the exception type to test for. 標準の例外クラスの一覧については、「クラス CException」を参照してください。For a list of standard exception classes, see class CException.

exception_object_pointer_nameexception_object_pointer_name
マクロによって作成される例外オブジェクトポインターの名前を指定します。Specifies a name for an exception-object pointer that will be created by the macro. ポインター名を使用して、 CATCH ブロック内の例外オブジェクトにアクセスできます。You can use the pointer name to access the exception object within the CATCH block. この変数は、ユーザーに対して宣言されます。This variable is declared for you.

解説Remarks

例外処理コードは、必要に応じて例外オブジェクトを問い合わせて、例外の特定の原因に関する詳細情報を取得することができます。The exception-processing code can interrogate the exception object, if appropriate, to get more information about the specific cause of the exception. THROW_LAST マクロを呼び出して、処理を次の外側の例外フレームにシフトします。Invoke the THROW_LAST macro to shift processing to the next outer exception frame. END_CATCH マクロを使用し て、TRY ブロックを終了します。End the TRY block with an END_CATCH macro.

Exception_class がクラスの場合は CException 、すべての例外の種類がキャッチされます。If exception_class is the class CException, then all exception types will be caught. CObject:: IsKindOfメンバー関数を使用すると、スローされた特定の例外を特定できます。You can use the CObject::IsKindOf member function to determine which specific exception was thrown. 複数の種類の例外をキャッチするより優れた方法は、それぞれが異なる例外の種類を持つシーケンシャル AND_CATCH ステートメントを使用することです。A better way to catch several kinds of exceptions is to use sequential AND_CATCH statements, each with a different exception type.

例外オブジェクトのポインターはマクロによって作成されます。The exception object pointer is created by the macro. 自分で宣言する必要はありません。You do not need to declare it yourself.

注意

CATCH ブロックは、中かっこで囲まれた C++ スコープとして定義されます。The CATCH block is defined as a C++ scope delineated by braces. このスコープで変数を宣言する場合、変数はそのスコープ内でのみアクセスできます。If you declare variables in this scope, they are accessible only within that scope. これは exception_object_pointer_name にも適用されます。This also applies to exception_object_pointer_name.

例外と CATCH マクロの詳細については、「 例外」を参照してください。For more information on exceptions and the CATCH macro, see the article Exceptions.

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

CATCH_ALLCATCH_ALL

前の TRY ブロックでスローされたすべての例外の種類をキャッチするコードブロックを定義します。Defines a block of code that catches all exception types thrown in the preceding TRY block.

CATCH_ALL(exception_object_pointer_name)

パラメーターParameters

exception_object_pointer_nameexception_object_pointer_name
マクロによって作成される例外オブジェクトポインターの名前を指定します。Specifies a name for an exception-object pointer that will be created by the macro. ポインター名を使用して、ブロック内の例外オブジェクトにアクセスでき CATCH_ALL ます。You can use the pointer name to access the exception object within the CATCH_ALL block. この変数は、ユーザーに対して宣言されます。This variable is declared for you.

解説Remarks

例外処理コードは、必要に応じて例外オブジェクトを問い合わせて、例外の特定の原因に関する詳細情報を取得することができます。The exception-processing code can interrogate the exception object, if appropriate, to get more information about the specific cause of the exception. マクロを呼び出して、 THROW_LAST 処理を次の外側の例外フレームにシフトします。Invoke the THROW_LAST macro to shift processing to the next outer exception frame. CATCH_ALL を使用する場合は、END_CATCH_ALL マクロを使用し て TRY ブロックを終了します。If you use CATCH_ALL, end the TRY block with an END_CATCH_ALL macro.

注意

CATCH_ALL ブロックは、中かっこで囲まれた C++ スコープとして定義されます。The CATCH_ALL block is defined as a C++ scope delineated by braces. このスコープで変数を宣言する場合、変数はそのスコープ内でのみアクセスできます。If you declare variables in this scope, they are accessible only within that scope.

例外の詳細については、「 例外」を参照してください。For more information on exceptions, see the article Exceptions.

Example

CFile:: Abortの例を参照してください。See the example for CFile::Abort.

要件Requirements

ヘッダー afxHeader afx.h

AND_CATCHAND_CATCH

前の TRY ブロックでスローされた追加の例外の種類をキャッチするためのコードブロックを定義します。Defines a block of code for catching additional exception types thrown in a preceding TRY block.

AND_CATCH(exception_class, exception_object_pointer_name)

パラメーターParameters

exception_classexception_class
テストする例外の種類を指定します。Specifies the exception type to test for. 標準の例外クラスの一覧については、「クラス CException」を参照してください。For a list of standard exception classes, see class CException.

exception_object_pointer_nameexception_object_pointer_name
マクロによって作成される例外オブジェクトポインターの名前。A name for an exception-object pointer that will be created by the macro. ポインター名を使用して、 AND_CATCH ブロック内の例外オブジェクトにアクセスできます。You can use the pointer name to access the exception object within the AND_CATCH block. この変数は、ユーザーに対して宣言されます。This variable is declared for you.

解説Remarks

CATCH マクロを使用して1つの例外の種類をキャッチし、AND_CATCH マクロを使用して、後続の各型をキャッチします。Use the CATCH macro to catch one exception type, then the AND_CATCH macro to catch each subsequent type. END_CATCH マクロを使用し て、TRY ブロックを終了します。End the TRY block with an END_CATCH macro.

例外処理コードは、必要に応じて例外オブジェクトを問い合わせて、例外の特定の原因に関する詳細情報を取得することができます。The exception-processing code can interrogate the exception object, if appropriate, to get more information about the specific cause of the exception. AND_CATCH ブロック内で THROW_LAST マクロを呼び出して、処理を次の外側の例外フレームにシフトします。Call the THROW_LAST macro within the AND_CATCH block to shift processing to the next outer exception frame. AND_CATCH は、前の CATCH または AND_CATCH ブロックの末尾をマークします。AND_CATCH marks the end of the preceding CATCH or AND_CATCH block.

注意

AND_CATCH ブロックは、(中かっこで囲まれた) C++ スコープとして定義されます。The AND_CATCH block is defined as a C++ scope (delineated by curly braces). このスコープで変数を宣言する場合は、そのスコープ内でのみアクセス可能であることに注意してください。If you declare variables in this scope, remember that they are accessible only within that scope. これは、 exception_object_pointer_name 変数にも適用されます。This also applies to the exception_object_pointer_name variable.

Example

CATCHの例を参照してください。See the example for CATCH.

要件Requirements

ヘッダー afxHeader afx.h

AND_CATCH_ALLAND_CATCH_ALL

前の TRY ブロックでスローされた追加の例外の種類をキャッチするためのコードブロックを定義します。Defines a block of code for catching additional exception types thrown in a preceding TRY block.

AND_CATCH_ALL(exception_object_pointer_name)

パラメーターParameters

exception_object_pointer_nameexception_object_pointer_name
マクロによって作成される例外オブジェクトポインターの名前。A name for an exception-object pointer that will be created by the macro. ポインター名を使用して、 AND_CATCH_ALL ブロック内の例外オブジェクトにアクセスできます。You can use the pointer name to access the exception object within the AND_CATCH_ALL block. この変数は、ユーザーに対して宣言されます。This variable is declared for you.

解説Remarks

Catch マクロを使用して1つの例外の種類をキャッチした後、AND_CATCH_ALL マクロを使用して、それ以外のすべての型をキャッチします。Use the CATCH macro to catch one exception type, then the AND_CATCH_ALL macro to catch all other subsequent types. AND_CATCH_ALL を使用する場合は、END_CATCH_ALL マクロを使用し て TRY ブロックを終了します。If you use AND_CATCH_ALL, end the TRY block with an END_CATCH_ALL macro.

例外処理コードは、必要に応じて例外オブジェクトを問い合わせて、例外の特定の原因に関する詳細情報を取得することができます。The exception-processing code can interrogate the exception object, if appropriate, to get more information about the specific cause of the exception. AND_CATCH_ALL ブロック内で THROW_LAST マクロを呼び出して、処理を次の外側の例外フレームにシフトします。Call the THROW_LAST macro within the AND_CATCH_ALL block to shift processing to the next outer exception frame. AND_CATCH_ALL は、前の CATCH または AND_CATCH_ALL ブロックの末尾をマークします。AND_CATCH_ALL marks the end of the preceding CATCH or AND_CATCH_ALL block.

注意

AND_CATCH_ALL ブロックは、(中かっこで囲まれた) C++ スコープとして定義されます。The AND_CATCH_ALL block is defined as a C++ scope (delineated by braces). このスコープで変数を宣言する場合は、そのスコープ内でのみアクセス可能であることに注意してください。If you declare variables in this scope, remember that they are accessible only within that scope.

要件Requirements

ヘッダー afxHeader afx.h

END_CATCHEND_CATCH

最後の CATCH または AND_CATCH ブロックの末尾をマークします。Marks the end of the last CATCH or AND_CATCH block.

END_CATCH

解説Remarks

END_CATCH マクロの詳細については、「 例外」を参照してください。For more information on the END_CATCH macro, see the article Exceptions.

要件Requirements

ヘッダー afxHeader afx.h

END_CATCH_ALLEND_CATCH_ALL

最後の CATCH_ALL88 または AND_CATCH_ALL ブロックの末尾をマークします。Marks the end of the last CATCH_ALL88 or AND_CATCH_ALL block.

END_CATCH_ALL

要件Requirements

ヘッダー afxHeader afx.h

THROW (MFC)THROW (MFC)

指定された例外をスローします。Throws the specified exception.

THROW(exception_object_pointer)

パラメーターParameters

exception_object_pointerexception_object_pointer
から派生した例外オブジェクトを指し CException ます。Points to an exception object derived from CException.

解説Remarks

プログラム内の関連する CATCH ブロックに制御を渡すことにより、プログラムの実行 を中断し ます。THROW interrupts program execution, passing control to the associated CATCH block in your program. CATCH ブロックを指定していない場合は、エラーメッセージを出力して終了する Microsoft Foundation Class ライブラリモジュールに制御が渡されます。If you have not provided the CATCH block, then control is passed to a Microsoft Foundation Class Library module that prints an error message and exits.

詳細については、「 例外」を参照してください。For more information, see the article Exceptions.

要件Requirements

ヘッダー afxHeader afx.h

THROW_LASTTHROW_LAST

次の外側の CATCH ブロックに例外をスローします。Throws the exception back to the next outer CATCH block.

THROW_LAST()

解説Remarks

このマクロを使用すると、ローカルで作成された例外をスローできます。This macro allows you to throw a locally created exception. キャッチした例外をスローしようとすると、通常はスコープ外になり、削除されます。If you try to throw an exception that you have just caught, it will normally go out of scope and be deleted. THROW_LAST では、例外は次の CATCH ハンドラーに正しく渡されます。With THROW_LAST, the exception is passed correctly to the next CATCH handler.

詳細については、「 例外」を参照してください。For more information, see the article Exceptions.

Example

CFile:: Abortの例を参照してください。See the example for CFile::Abort.

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowArchiveExceptionAfxThrowArchiveException

アーカイブの例外をスローします。Throws an archive exception.

void  AfxThrowArchiveException(int cause, LPCTSTR lpszArchiveName);

パラメーターParameters

causecause
例外の理由を示す整数を指定します。Specifies an integer that indicates the reason for the exception. 使用可能な値の一覧については、「 Cアーカイブ例外:: m_cause」を参照してください。For a list of the possible values, see CArchiveException::m_cause.

LpszアーカイブlpszArchiveName
CArchive例外の原因となったオブジェクトの名前を含む文字列を指します (使用可能な場合)。Points to a string containing the name of the CArchive object that caused the exception (if available).

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowFileExceptionAfxThrowFileException

ファイル例外をスローします。Throws a file exception.

void AfxThrowFileException(
    int cause,
    LONG lOsError = -1,
    LPCTSTR lpszFileName = NULL);

パラメーターParameters

causecause
例外の理由を示す整数を指定します。Specifies an integer that indicates the reason for the exception. 使用可能な値の一覧については、「 CFileException:: m_cause」を参照してください。For a list of the possible values, see CFileException::m_cause.

lOsErrorlOsError
例外の原因を示すオペレーティングシステムエラー番号 (使用可能な場合) が含まれます。Contains the operating-system error number (if available) that states the reason for the exception. エラーコードの一覧については、オペレーティングシステムのマニュアルを参照してください。See your operating-system manual for a listing of error codes.

lpszFileNamelpszFileName
例外の原因となったファイルの名前を含む文字列を指します (使用可能な場合)。Points to a string containing the name of the file that caused the exception (if available).

解説Remarks

オペレーティングシステムのエラーコードに基づいて、原因を特定する責任があります。You are responsible for determining the cause based on the operating-system error code.

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowInvalidArgExceptionAfxThrowInvalidArgException

無効な引数の例外をスローします。Throws an invalid argument exception.

構文Syntax

void AfxThrowInvalidArgException( );

解説Remarks

無効な引数が使用されると、この関数が呼び出されます。This function is called when invalid arguments are used.

要件Requirements

ヘッダー: afxHeader: afx.h

AfxThrowMemoryExceptionAfxThrowMemoryException

メモリ例外をスローします。Throws a memory exception.

void AfxThrowMemoryException();

解説Remarks

基になるシステムメモリアロケーター ( mallocGlobalAlloc Windows 関数など) への呼び出しが失敗した場合に、この関数を呼び出します。Call this function if calls to underlying system memory allocators (such as malloc and the GlobalAlloc Windows function) fail. new new メモリ割り当てが失敗した場合、はメモリ例外を自動的にスローするため、に対してを呼び出す必要はありません。You do not need to call it for new because new will throw a memory exception automatically if the memory allocation fails.

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowNotSupportedExceptionAfxThrowNotSupportedException

サポートされていない機能に対する要求の結果である例外をスローします。Throws an exception that is the result of a request for an unsupported feature.

void AfxThrowNotSupportedException();

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowResourceExceptionAfxThrowResourceException

リソース例外をスローします。Throws a resource exception.

void  AfxThrowResourceException();

解説Remarks

通常、この関数は、Windows リソースを読み込むことができないときに呼び出されます。This function is normally called when a Windows resource cannot be loaded.

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowUserExceptionAfxThrowUserException

エンドユーザーの操作を停止する例外をスローします。Throws an exception to stop an end-user operation.

void AfxThrowUserException();

解説Remarks

通常、この関数は、 AfxMessageBox がユーザーにエラーを報告した直後に呼び出されます。This function is normally called immediately after AfxMessageBox has reported an error to the user.

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowOleDispatchExceptionAfxThrowOleDispatchException

OLE オートメーション関数内で例外をスローするには、この関数を使用します。Use this function to throw an exception within an OLE automation function.

void AFXAPI AfxThrowOleDispatchException(
    WORD wCode ,
    LPCSTR lpszDescription,
    UINT nHelpID = 0);

void AFXAPI AfxThrowOleDispatchException(
    WORD wCode,
    UINT nDescriptionID,
    UINT nHelpID = -1);

パラメーターParameters

wCodewCode
アプリケーション固有のエラーコード。An error code specific to your application.

lpszDescriptionlpszDescription
エラーの説明。Verbal description of the error.

nDescriptionIDnDescriptionID
音声エラーの説明のリソース ID。Resource ID for the verbal error description.

nHelpIDnHelpID
アプリケーションのヘルプのヘルプコンテキスト (.HLP) ファイル。A help context for your application's help (.HLP) file.

解説Remarks

この関数に提供される情報は、運転アプリケーション (Microsoft Visual Basic またはその他の OLE オートメーションクライアントアプリケーション) によって表示できます。The information provided to this function can be displayed by the driving application (Microsoft Visual Basic or another OLE automation client application).

Example

// Sort is method of automation class CStrArrayDoc
long CStrArrayDoc::Sort(VARIANT* vArray)
{
   USES_CONVERSION;

   // Type check VARIANT parameter. It should contain a BSTR array
   // passed by reference. The array must be passed by reference; it is
   // an in-out-parameter.

   // throwing COleDispatchException allows the EXCEPINFO structure of 
   // IDispatch::Invoke() to set
   if (V_VT(vArray) != (VT_ARRAY | VT_BSTR))
      AfxThrowOleDispatchException(1001,
         _T("Type Mismatch in Parameter. Pass a string array by reference"));

   // ...
   // ...

   return 0;
}

要件Requirements

ヘッダー afxHeader afx.h

AfxThrowOleExceptionAfxThrowOleException

型のオブジェクトを作成 COleException し、例外をスローします。Creates an object of type COleException and throws an exception.

void AFXAPI AfxThrowOleException(SCODE sc);
void AFXAPI AfxThrowOleException(HRESULT hr);

パラメーターParameters

scsc
例外の理由を示す OLE ステータスコード。An OLE status code that indicates the reason for the exception.

時間hr
例外の理由を示す結果コードを処理します。Handle to a result code that indicates the reason for the exception.

解説Remarks

引数として HRESULT を受け取るバージョンは、その結果コードを対応する SCODE に変換します。The version that takes an HRESULT as an argument converts that result code into the corresponding SCODE. HRESULT と SCODE の詳細については、「Windows SDK の COM エラーコードの構造 」を参照してください。For more information on HRESULT and SCODE, see Structure of COM Error Codes in the Windows SDK.

要件Requirements

ヘッダー afxdaoHeader afxdao.h

AfxThrowDaoExceptionAfxThrowDaoException

独自のコードから CDaoException 型の例外をスローするには、この関数を呼び出します。Call this function to throw an exception of type CDaoException from your own code.

void AFXAPI AfxThrowDaoException(
    int nAfxDaoError = NO_AFX_DAO_ERROR,
    SCODE scode = S_OK);

パラメーターParameters

nAfxDaoErrornAfxDaoError
DAO 拡張エラーコードを表す整数値。 CDaoException:: m_nAfxDaoErrorの下に一覧表示されている値のいずれかを指定できます。An integer value representing a DAO extended error code, which can be one of the values listed under CDaoException::m_nAfxDaoError.

scodescode
型 SCODE の DAO からの OLE エラーコード。An OLE error code from DAO, of type SCODE. 詳細については、「 CDaoException:: m_scode」を参照してください。For information, see CDaoException::m_scode.

解説Remarks

フレームワークもを呼び出し AfxThrowDaoException ます。The framework also calls AfxThrowDaoException. の呼び出しでは、いずれかのパラメーターまたは両方を渡すことができます。In your call, you can pass one of the parameters or both. たとえば、 CDaoException:: nAfxDaoError で定義されているいずれかのエラーを発生させても、 scode パラメーターを気にする必要がない場合は、 nAfxDaoError パラメーターに有効なコードを渡し、 scode の既定値をそのまま使用します。For example, if you want to raise one of the errors defined in CDaoException::nAfxDaoError but you do not care about the scode parameter, pass a valid code in the nAfxDaoError parameter and accept the default value for scode.

MFC DAO クラスに関連する例外の詳細については、 CDaoException このブックの「クラス」および「 例外: データベース例外」を参照してください。For information about exceptions related to the MFC DAO classes, see class CDaoException in this book and the article Exceptions: Database Exceptions.

要件Requirements

ヘッダー afxdb.hHeader afxdb.h

AfxThrowDBExceptionAfxThrowDBException

独自のコードから型の例外をスローするには、この関数を呼び出し CDBException ます。Call this function to throw an exception of type CDBException from your own code.

void AfxThrowDBException(
    RETCODE nRetCode,
    CDatabase* pdb,
    HSTMT hstmt);

パラメーターParameters

nRetCodenRetCode
例外がスローされる原因となったエラーの種類を定義する RETCODE 型の値。A value of type RETCODE, defining the type of error that caused the exception to be thrown.

pdbpdb
CDatabase例外が関連付けられているデータソース接続を表すオブジェクトへのポインター。A pointer to the CDatabase object that represents the data source connection with which the exception is associated.

hstmthstmt
例外が関連付けられているステートメントハンドルを指定する ODBC HSTMT ハンドル。An ODBC HSTMT handle that specifies the statement handle with which the exception is associated.

解説Remarks

このフレームワークは、 AfxThrowDBException ODBC API 関数の呼び出しから ODBC RETCODE を受け取ったときにを呼び出し、expectable エラーではなく例外的な条件として RETCODE を解釈します。The framework calls AfxThrowDBException when it receives an ODBC RETCODE from a call to an ODBC API function and interprets the RETCODE as an exceptional condition rather than an expectable error. たとえば、データアクセス操作がディスク読み取りエラーのために失敗する場合があります。For example, a data access operation might fail because of a disk read error.

ODBC で定義されている RETCODE 値の詳細については、「」の「Windows SDK の「状態とエラー情報の取得」を参照してください。For information about the RETCODE values defined by ODBC, see Chapter 8, "Retrieving Status and Error Information," in the Windows SDK. これらのコードに対する MFC の拡張機能の詳細については、「クラス CDBException」を参照してください。For information about MFC extensions to these codes, see class CDBException.

要件Requirements

ヘッダー afxHeader afx.h

AfxAbortAfxAbort

MFC によって提供される既定の終了関数。The default termination function supplied by MFC.

void  AfxAbort();

解説Remarks

AfxAbort は、キャッチできない例外などの致命的なエラーが発生した場合に、MFC メンバー関数によって内部的に呼び出されます。AfxAbort is called internally by MFC member functions when there is a fatal error, such as an uncaught exception that cannot be handled. を復元でき AfxAbort ない致命的なエラーが発生した場合は、まれにを呼び出すことができます。You can call AfxAbort in the rare case when you encounter a catastrophic error from which you cannot recover.

Example

CATCHの例を参照してください。See the example for CATCH.

要件Requirements

ヘッダー afxHeader afx.h

関連項目See also

マクロとグローバルMacros and Globals
CException クラスCException Class
CInvalidArgException クラスCInvalidArgException Class