【发布时间】:2013-01-16 13:18:10
【问题描述】:
是否可以在WindowProc 回调中捕获错误? try / catch 不起作用。看起来像 __try __except 和硬件异常(例如AV)也不起作用。
更新:
我发现确实有可能在WindowProc 回调中抛出异常并在WindowProc 之外使用catch 块捕获它。经过测试并在Windows XP x86 上工作。我发现了相关问题64bit exceptions in WndProc silently fail 这个问题似乎只存在于Windows 7 x64 上(并且根据这个问题也存在于其他 x64 Windows 版本上)。
所以问题是有可能以某种方式在WindowProc 中抛出异常并在WindowProc 之外用catch 块捕获它吗?我安装了 microsoft 修补程序,在注册表中将 DisableUserModeCallbackFilter 设置为 1,我得到的最好的是 FATAL_USER_CALLBACK_EXCEPTION,这不是我的例外。
【问题讨论】:
-
winapi 函数不使用异常。它们是用 C 语言编写的。
-
是否可以在 WindowProc 回调中确定错误而无异常?
-
当然,从那里调用函数,检查失败,并适当地使用
GetLastError等。如果从WindowProc中调用的函数调用,则传播结果。
标签: c++ winapi exception-handling seh