C++ 从属性页';处理者

C++ 从属性页';处理者,c++,exception-handling,wtl,propertysheet,C++,Exception Handling,Wtl,Propertysheet,我希望通过顶级应用程序的try-catch块而不是在属性页的处理程序(例如,OnInitDialog处理程序)中捕获并处理一个exoption。因此,在下面的代码中,这些异常应该在catch(…)块中处理 但是,当OnInitDialog引发异常时,在运行windows析构函数后会出现一个断言(在调试模式下)。即使我在CMyPropertySheet析构函数中调用EndDialog(m_hWnd,IDCANCEL),断言仍然存在。你能帮我找出丢失或缠绕的东西吗?我使用WTL。My a属性表cla

我希望通过顶级应用程序的try-catch块而不是在属性页的处理程序(例如,OnInitDialog处理程序)中捕获并处理一个exoption。因此,在下面的代码中,这些异常应该在catch(…)块中处理

但是,当OnInitDialog引发异常时,在运行windows析构函数后会出现一个断言(在调试模式下)。即使我在CMyPropertySheet析构函数中调用EndDialog(m_hWnd,IDCANCEL),断言仍然存在。你能帮我找出丢失或缠绕的东西吗?我使用WTL。My a属性表claa源自CPropertySheetImpl


谢谢。

您无法通过C接口(如CreateDialog、DispatchMessage等)安全地传递异常。您必须在它们从窗口过程中逃脱之前捕获它们,以某种方式将它们转移到调用方,然后从那里重新调用它们。您可以在C++0x中进行常规操作,但您可能还没有对它的支持。尝试使用
boost::exceptions
在C++03中进行近似计算

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}