如果从MFC对话框中抛出异常,即使代码中有catch块,应用程序也会挂起.它拒绝响应鼠标或键盘,关闭它的唯一方法是使用任务管理器.
令我遗憾的是,有一个流行的收缩包装应用程序,每次遇到模态对话框中的异常错误时都会挂起.当我们从整数错误代码大量转换到异常时,我负责选择std :: exception作为抛出异常的基类.直到大量的工作进入转换,我们的测试才发现了这个问题,到那时为时已经太晚了.希望这个问题/答案会让某人犯同样的错误.
CDialog :: DoModal的代码通过禁用父窗口使对话框模态化.当对话框代码返回时,窗口将重新启用.CException*错误有一个显式的catch,但是没有任何其他类型的抛出异常; 因此父窗口永远不会被重新启用.
更改您的代码以抛出指向从CException派生的任何异常的指针,您将解决该问题.