SEH 例外と C++ 例外

Windows には構造化例外というものがあるそうな。
プログラム側がミスった時に出る、あれ。
あのダイアログ──デバッグするか、閉じるかってあれだよ。
0 で割ったりとかすると、出てくるあれが構造化例外。
それを制御できるってのがあるらしい。

  1. VC++構造化例外メモ(Hishidama's VC++2005 SEH Memo)[www.ne.jp]
  2. 構造化例外処理と UnhandledExceptionFilter - Web/DB プログラミング徹底解説[keicode.com]
  3. 例外処理 (SEH)[msdn.microsoft.com]
  4. 構造化例外を 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 で処理するとなるとめちゃくちゃめんどくさいことになりそうだ。
とほほ…