MSDNはUnhandledExceptionFilter
、次のように説明しています。「プロセスがデバッグされている場合に、未処理の例外をデバッガーに渡すアプリケーション定義関数。」
しかし、この関数は、同じページによると、kernel32.dllのOSによって明確に提供されています。
では、なぜ彼らはそれをアプリケーション定義関数と呼ぶのでしょうか?
MSDNはUnhandledExceptionFilter
、次のように説明しています。「プロセスがデバッグされている場合に、未処理の例外をデバッガーに渡すアプリケーション定義関数。」
しかし、この関数は、同じページによると、kernel32.dllのOSによって明確に提供されています。
では、なぜ彼らはそれをアプリケーション定義関数と呼ぶのでしょうか?
はい、非常に厄介な言語です。関数のプロトタイプ定義です。__except キーワードで使用するか、SetUnhandledExceptionFilter() の引数として使用できます。どちらもあなたのものを「アプリケーション定義関数」にします。
どちらも行わない場合はデフォルトの処理があり、デバッガーは未処理の例外で自動的に停止します。これは、「デバッガに例外を渡す」という意味だと思います。SEH の SDK ドキュメントは、総合的に不合格に値します。
UnhandledExceptionFilter() 自体は、カーネルによって提供される独自の関数ではありません (ただし、カーネルは独自のデフォルト実装を実装しており、独自のものでオーバーライドするまで使用されます)。引用する UnhandledExceptionFilter() ドキュメントには、独自の関数を実装し、それを SetUnhandledExceptionFilter() 関数に渡してカーネル内でアクティブにすることを選択した場合に従う必要がある関数プロトタイプが説明されています。