現在、構造化例外処理(SEH)メカニズムについてお読みいただき、C++でいくつかの演習を行っています。C++ SEH - EXCEPTION_DISPOSITION列挙型と__except()フィルタ式の間の相関
私は理解していないことの一つにされた -
excpt.h
ファイルには二つの重要な定義は「グループ」があります。
EXCEPTION_DISPOSITION
列挙型の定義と_except_handler
コールバックの定義は、機能- 3つのマクロの定義 -
EXCEPTION_EXECUTE_HANDLER
(値は1)、EXCEPTION_CONTINUE_SEARCH
(値が0)、EXCEPTION_CONTINUE_EXECUTION
(値は - 1)
私は理解したよう - EXCEPTION_DISPOSITION
の
値が使用されている
_EXCEPTION_REGISTRATION
stuctを使用して例外コールバック関数ハンドラ(のリンクリストを通過するときは、スレッド情報/環境ブロックで指さが指しますFS
レジスタ)。 3つのマクロの値は
_except
フィルタ
EXCEPTION_DISPOSITION
列挙型の名前のいくつかは、上記の3つのマクロと同じ名前を持っているとして使用されているが、それらは、(いくつかの全く異なる責任を持っています_except
フィルタとして使用され、その他は_EXCEPTION_REGISTRATION
のリンクリストを反復するために使用されます)。
基本的に私の質問は - この相関の理由は何ですか? それらの間に「交差点」がありますか? (彼らは何らかの形で一緒に "働いていますか")
私はここに何かが欠けていますか?
まず、お返事いただきありがとうございます。第二に、私は列挙に関してあなたが言ったことを完全に理解しているかどうかはわかりません。あなたはそれがコンパイラによって生成された例外フィルタによって返されたと私はそれを使用する必要がある唯一の時間は私自身の__except()を実装するときだと言いました。あなたがそれを説明することができれば素晴らしいだろう。私が知っていることは、EXCEPTION_DISPOSITIONが_except_handler(例外コールバック関数)の実装の戻り値として使用されていることです。ありがとうございました。 – golosovsky
私は*正確な*反対: "あなたは純粋な実装の詳細のようにそれを扱う必要がある、それはあなた自身のコードに全く影響を与えない"と言った。あなたがそれを得ていないという不思議、私はなぜ推測できません。私は繰り返します:自分の '__try/__ except'コードでのみマクロ値を使用し、enumは使用しないでください。 –