这是一个非常低级的问题,但也许这里有人有一些见识......
我遇到了一个问题,未处理的 SEH 异常(例如访问冲突)似乎在 Win32 消息调度级别被捕获,而不是终止程序。我找到了以下参考博客,它解释了问题,但仅在 WM_TIMER 消息的上下文中:http: //bugswar.blogspot.com/2010/07/why-its-not-crashing.html
我遇到了 Win 2008R2 和“正常”消息(例如:WM_COMMAND 等)的问题。我怀疑它可能是 Windows 试图通过屏蔽异常来“帮助”,但我希望它出错;“继续并忽略”行为通常会导致应用程序出现问题。我意识到我可以尝试将每个函数包装在 try/catch 中,并使用编译器选项 /EHa 将 SEH 异常转换为 C++ 异常(这本身非常令人沮丧和危险),但这显然不是最佳的。
根据引用的博客,TIB 结构 (http://en.wikipedia.org/wiki/Win32_Thread_Information_Block) 中的 AppCompatFlags2 中有一个标志,这可能导致 Win32 处理程序无法捕获/丢弃 SEH 异常,但我没有想法如何设置/启用它。有人对此有任何见解吗?是否可以启用 AppCompat 设置以使 Windows 不捕获和忽略异常?