从属性表页面的处理程序抛出的异常

时间:2011-06-27 07:11:25

标签: c++ exception-handling wtl propertysheet

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

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}

但是,当OnInitDialog抛出异常时,在运行Windows析构函数后会出现断言(在调试模式下)。即使我在CMyPropertySheet析构函数中调用EndDialog(m_hWnd,IDCANCEL),断言仍然存在。你能帮忙找出遗失或争吵的东西吗?我用WTL。我的属性表claa来自CPropertySheetImpl。

感谢。

1 个答案:

答案 0 :(得分:0)

您无法通过C接口(如CreateDialog,DispatchMessage等)安全地传递异常。你必须先将它们全部捕获,然后才能从窗口程序中逃脱,将它们以某种方式传递给调用者,然后从那里重新抛出它们。你可以在C ++ 0x中一般地完成它,但你可能还没有它的支持。尝试使用boost::exceptions在C ++ 03中近似它。