メインページ   名前空間一覧   クラス階層   アルファベット順一覧   構成   ファイル一覧   名前空間メンバ   構成メンバ   ファイルメンバ  

クラス KSCL::CStructuredException の解説

・構造化例外が発生したときに投げられるクラスです。. より詳しく...

すべてのメンバ一覧

公開メンバ

 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++ 例外を 使っていくようにしてください。


コンストラクタとデストラクタの解説

KSCL::CStructuredException::CStructuredException unsigned int    p_ui,
EXCEPTION_POINTERS *    p_pstExp
 

・コンストラクタ。.

 初期化を行い、メッセージを生成します。

引数:
p_ui  エラーコード。
p_pstExp  例外情報。

KSCL::CStructuredException::CStructuredException const CStructuredException &    p_rcException
 

・コピーコンストラクタ。.

 ないとエラーになるので。

引数:
p_rcException  自分と同じクラス。 = の右オペランドとして渡されます。

KSCL::CStructuredException::~CStructuredException   throw () [virtual]
 

・デストラクタ。.

 特に何もしません。


メンバ関数の解説

void KSCL::CStructuredException::MakeMessage  
 

・メッセージを作成します。.

 what() で返すメッセージを作成します。

const char * KSCL::CStructuredException::what   const throw () [virtual]
 

・例外についてのメッセージを返します。.

 std::runtime_error のもののオーバーライドです。

戻り値:
エラーメッセージ。

unsigned int KSCL::CStructuredException::GetCode   const throw ()
 

・コードを返します。.

 エラーコードを返します。

戻り値:
エラーコード。エラーコード自体に関しては GetExceptionCode() のリファレンスをご覧ください。

const EXCEPTION_POINTERS * KSCL::CStructuredException::GetPointers   const throw ()
 

・例外についての情報を返します。.

 例外についての細かい情報が入った EXCEPTION_POINTERS 構造体へのポインタを返します。

戻り値:
例外情報。詳しくは EXCEPTION_POINTERS のリファレンスをご覧ください。

void KSCL::CStructuredException::UseThis   throw () [static]
 

・構造化例外発生時にこのクラスを投げてもらうために、この関数を呼び出してください。.

 この関数を、たとえば WinMain() の直後に呼んでください。
 それだけで、構造化例外が発生したときにこのクラスが投げられるようになります。

警告:
このシステムはスレッドごとに機能するので、スレッドごとに呼び出してください。

void KSCL::CStructuredException::Thrower unsigned int    p_ui,
EXCEPTION_POINTERS *    p_pstExp
throw ( CStructuredException ) [static, private]
 

・このクラスを例外として投げます。.

 構造化例外が発生したときに呼ばれます。この中で、このクラスを例外として投げます。

引数:
p_ui  エラーコード。
p_pstExp  例外情報。


メンバの解説

unsigned int KSCL::CStructuredException::m_ui [private]
 

・例外コード。.

 このコードを調べることで、どんな例外が発生したのか調べることができます。
 たとえばアクセス違反は 0xC0000005 です。

EXCEPTION_POINTERS* KSCL::CStructuredException::m_pstExp [private]
 

・例外についての情報が入った構造体。.

std::string KSCL::CStructuredException::m_cStr [private]
 

・例外についてのメッセージ。.


KSCL(KAB-studioClassLibrary)に対してThu Jun 12 09:55:41 2003に生成されました。 doxygen1.2.15