WindowProc中的异常

Dem*_*ion 5 c++ winapi exception-handling seh

是否有可能在WindowProc回调中捕获错误?try/ catch不起作用.看起来__try __except和硬件异常(AV例如)也不起作用.


更新:

我发现确实可以在WindowProc回调中抛出异常并用catch块外部捕获它WindowProc.经过测试并继续工作Windows XP x86.我在WndProc中找到了相关的问题64位异常默默地失败问题似乎只存在于Windows 7 x64(并且根据其他x64 Windows版本上的问题).

所以问题是有可能以某种方式抛出异常WindowProc并用catch块外部捕获它WindowProc吗?我安装了microsoft hotfix,DisableUserModeCallbackFilter在注册表中设置为1,我得到的最好FATAL_USER_CALLBACK_EXCEPTION,不是我的例外.

use*_*015 4

WindowProc 的 MSDN 文档包含有关从 WindowProc 引发/传播的异常的详细信息。似乎异常仅在 32 位版本的 Windows 中传播。

但是,您原来的问题与更新中的问题不同。第一个是关于捕获WindowProc 中的异常,这始终可以正常工作。第二个是关于从 WindowProc抛出异常。

我不确定第二个的有用性/必要性。窗口过程通常由于以下原因而被调用:

  1. 在消息循环中调用DispatchMessage。在这种情况下没有必要抛出异常,因为这样做只会导致应用程序退出。如果遇到导致应用程序退出的错误,只需调用 PostQuitMessage(0)
  2. 调用发送消息。在这种情况下,您实际上不想抛出异常,因为窗口过程将在 UI 线程中执行,并且如果调用线程与 UI 线程不同,则调用线程无论如何都不会得到异常
  3. 直接调用窗口过程。在这种情况下,异常会很好地工作。