SEH 例外と C++ 例外
Windows には構造化例外というものがあるそうな。
プログラム側がミスった時に出る、あれ。
あのダイアログ──デバッグするか、閉じるかってあれだよ。
0 で割ったりとかすると、出てくるあれが構造化例外。
それを制御できるってのがあるらしい。
- VC++構造化例外メモ(Hishidama's VC++2005 SEH Memo)[www.ne.jp]
- 構造化例外処理と UnhandledExceptionFilter - Web/DB プログラミング徹底解説[keicode.com]
- 例外処理 (SEH)[msdn.microsoft.com]
- 構造化例外を try でキャッチ[wiki.encom.bz]
一番上を見ればわかるように、構造化例外をキャッチするには普通の例外ではダメらしい。
めんどくさいなぁもう。
俺ルールこれ以上増やすなよ…
で、一番下は構造化例外を普通にキャッチできる方法。
なんか道筋が見えてきたね。
こうすればいいわけだ:
void se_transrator(unsigned int code, _EXCEPTION_POINTERS* ep) { switch ( code ) { case D3DERR_NOTAVAILABLE: throw NotAvailableException(); break; case D3DERR_DEVICELOST: throw DeviceLostException(); break; case D3DERR_INVALIDCALL: throw InvalidCallException(); break; case D3DERR_OUTOFVIDEOMEMORY: throw OutOfVideoMemoryException(); break; case E_OUTOFMEMORY: throw OutOfMemoryException(); break; } }
これはある DirectX 用のクラスのとあるメンバ関数での例外処理だけど、ep を受け取るコンストラクタが欲しいところだよね。
それに、全部 se_transrator で処理するとなるとめちゃくちゃめんどくさいことになりそうだ。
とほほ…