2

特定の状況でRaiseException()、Win32 関数に渡されたコールバック内で例外を発生させるために呼び出す必要があります。

一例として、 を呼び出して、コール スタックのずっと下のブロックで処理RaiseException()したいと思います。LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM)__try { } __except() { }

x86とamd64で予測可能な結果が得られるという意味で、これは「安全」ですか? リソースを漏らさないという意味で「安全」ですか†?

†:私が制御する中間スタック フレームは、リソースをリークしないように設定されていると仮定します。私は、私にとって「不透明」な Win32 API スタック フレームだけに関心があります。

4

1 に答える 1

0

私の経験では、最初の (そして唯一の) 例外ハンドラーであることに依存している場合、勝手に SEH 例外を発生させるのは安全ではありません。最初に例外をインターセプトする可能性のあるメカニズムがいくつかあります。たとえば、デバッガーとして機能するものはすべて、予期しないアクションを実行します。

これはコードの匂いのようです。これを回避するためにコードを構造化する他の方法はありませんか? (悪意の少ない)gotoを使用していただけますか?

于 2014-08-14T20:39:01.773 に答える