例外 (SEH) が発生した際、例外フィルタにて GetExceptionInformation を用いて、その例外の情報を取得することが可能です。 GetExceptionInformation は例外フィルタでしか参照することはできません。 LPEXCEPTION_POINTERS GetExceptionInformation(void); GetExceptionInformation は EXCEPTION_POINTERS へのポインタを返します。 EXCEPTION_POINTERS の定義は次です。 typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
これらはマクロなので、実際は整数が割り当てられている。 しかし__except()は正か0か負かという判断しかしてないらしいので、実はどんな値でもよい…? とは言え、上記のようなマクロが定義されているんだから、それを指定するべきだろう。 という訳で、__exceptの括弧内に式(MSDNではフィルタ式と称している)を書いて最終的に整数を返すことにより、条件に応じて処理を変更することが出来る。 例えばカンマ演算子を使ったり、独自の別関数(MSDNではフィルタ関数と称している)を呼び出したりすればよい。 _EXCEPTION_POINTERS* info; __try { 処理; } __except (info = GetExceptionInformation(), EXCEPTION_EXECUTE_HANDLER) { //構造化例外の情報をinfoに入れている。 //カンマ演算子では
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く