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