公開メンバ | |
CStructuredException (unsigned int p_ui, EXCEPTION_POINTERS *p_pstExp) | |
・コンストラクタ。. より詳しく... | |
CStructuredException (const CStructuredException &p_rcException) | |
・コピーコンストラクタ。. より詳しく... | |
virtual | ~CStructuredException () throw () |
・デストラクタ。. より詳しく... | |
void | MakeMessage () |
・メッセージを作成します。. より詳しく... | |
virtual const char * | what () const throw () |
・例外についてのメッセージを返します。. より詳しく... | |
unsigned int | GetCode () const throw () |
・コードを返します。. より詳しく... | |
const EXCEPTION_POINTERS * | GetPointers () const throw () |
・例外についての情報を返します。. より詳しく... | |
静的公開メンバ | |
void | UseThis () throw () |
・構造化例外発生時にこのクラスを投げてもらうために、この関数を呼び出してください。. より詳しく... | |
静的非公開メンバ | |
void | Thrower (unsigned int p_ui, EXCEPTION_POINTERS *p_pstExp) throw ( CStructuredException ) |
・このクラスを例外として投げます。. より詳しく... | |
非公開属性 | |
unsigned int | m_ui |
・例外コード。. より詳しく... | |
EXCEPTION_POINTERS * | m_pstExp |
・例外についての情報が入った構造体。. より詳しく... | |
std::string | m_cStr |
・例外についてのメッセージ。. より詳しく... |
構造化例外( Structured Exception )とは、たとえば「アクセス違反」や「 0 で除算」等の 「やっちゃいけないこと」をした時に発生する例外のことです。
基本的に、構造化例外処理は次のようなものがセオリーですが、それぞれ問題点があります。
「 __try - __except で受け取る」:デストラクタが呼ばれない。
「 try - catch( ... ) で受け取る」:どんな例外が発生したのか判らない。
「受け取らずに Dr.ワトソン任せ」:非常に見苦しい。
このクラスはこれらの問題点を解決します。
このクラスの CStructuredException::UseThis() を最初に呼んでおくことで、構造化例外が発生したときに CStructuredException クラスが例外として投げられるようになります。
そうすると、あたかも「普通のプログラム内のエラーが発生した」かのように「アクセス違反が発生した」ことを 知らせることができます。また、このシステムを使うことで「どこでエラーが発生したのか」を調べることもできます。
ただし、構造化例外は基本的に「発生してはいけない」ものです。構造化例外をわざと発生させるような処理は しない方がいいでしょう。また RaiseException() を使用するよりは throw を使用し、これを含めて基本的には C++ 例外を 使っていくようにしてください。
|
・コンストラクタ。. 初期化を行い、メッセージを生成します。
|
|
・コピーコンストラクタ。. ないとエラーになるので。
|
|
・デストラクタ。. 特に何もしません。 |
|
・メッセージを作成します。. what() で返すメッセージを作成します。 |
|
・例外についてのメッセージを返します。. std::runtime_error のもののオーバーライドです。
|
|
・コードを返します。. エラーコードを返します。
|
|
・例外についての情報を返します。. 例外についての細かい情報が入った EXCEPTION_POINTERS 構造体へのポインタを返します。
|
|
・構造化例外発生時にこのクラスを投げてもらうために、この関数を呼び出してください。.
この関数を、たとえば WinMain() の直後に呼んでください。
|
|
・このクラスを例外として投げます。. 構造化例外が発生したときに呼ばれます。この中で、このクラスを例外として投げます。
|
|
・例外コード。.
このコードを調べることで、どんな例外が発生したのか調べることができます。 |
|
・例外についての情報が入った構造体。.
|
|
・例外についてのメッセージ。.
|