我正在编写使用 3rd 方库执行一项简单任务(光栅化)的小型实用程序(VC 2010,无 clr)。以后的实用程序将被更大的应用程序使用。有时,由于 3rd 方库中的一些堆损坏,实用程序会崩溃。没关系,但 Windows (Vista/2008) 显示众所周知的对话框“程序已停止工作......关闭/调试程序”。这在我的情况下不合适(服务器端)。实用程序应在没有任何可见效果的情况下静默崩溃/终止。
为此,我为未处理的异常 (SetUnhandledExceptionFilter) 安装了 SEH。对于像 AV ( *(PDWORD)0 = 0 ) 这样的异常,处理程序被完美地调用,但由于某种原因,它不会在堆损坏的情况下被调用。在卸载第 3 方库 dll 之一的 dllmain 时发生损坏。
几个问题。谁能解释为什么不调用处理程序?还有其他方法可以防止该对话吗?