1

我想通过顶级应用程序的 try-catch 块而不是在属性表页面的处理程序(例如 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。

谢谢。

4

1 回答 1

0

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

于 2011-06-28T09:39:33.273 回答