5

WindowProcコールバック内でエラーをキャッチすることは可能ですか? try/catch動作しません。__try __exceptまた、ハードウェア例外 ( など) も動作しAVません。


アップデート:

確かに、コールバックで例外をスローし、ブロックの外側WindowProcでキャッチすることが可能であることがわかりました。テスト済みで動作します。私は、WndProc で関連する質問64 ビット例外がサイレントに失敗することを発見しました。catchWindowProcWindows XP x86Windows 7 x64

それで、どうにかして例外をスローし、ブロックの外側WindowProcでキャッチすることは可能ですか? Microsoft ホットフィックスをインストールし、レジストリで 1 に設定しましたが、私の例外ではなく、最高の結果が得られました。catchWindowProcDisableUserModeCallbackFilterFATAL_USER_CALLBACK_EXCEPTION

4

3 に答える 3

4

WindowProcのMSDNドキュメントには、WindowProcからスロー/伝播された例外に関する詳細情報があります。例外は32ビットバージョンのWindowsでのみ伝播されるようです。

ただし、元の質問は更新の質問とは異なります。1つ目は、WindowProcで例外をキャッチすることでしたが、これは常に正常に機能します。2つ目は、WindowProcから例外をスローすることです。

2つ目の有用性/必要性についてはよくわかりません。ウィンドウプロシージャは通常、次の結果として呼び出されます。

  1. メッセージループでDispatchMessageを呼び出します。この場合、例外をスローする必要はありません。例外をスローすると、アプリケーションが終了するだけだからです。アプリケーションを終了させるエラーが発生した場合は、PostQuitMessage(0)を呼び出すだけです。
  2. SendMessageを呼び出します。この場合、ウィンドウプロシージャはUIスレッドで実行されるため、実際には例外をスローする必要はありません。呼び出し元のスレッドがUIスレッドと異なる場合でも、呼び出し元のスレッドは例外を取得しません。
  3. ウィンドウプロシージャを直接呼び出す。この場合、例外は正常に機能します。
于 2013-03-08T11:33:26.863 に答える