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

发布于 2024-11-17 10:36:49 字数 449 浏览 9 评论 0原文

我想通过顶级应用程序的 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。

谢谢。

I'd like to catch and handle an excption by the top level application's try-catch block rather then inside the property sheet pages' handlers (for example, OnInitDialog handler). Thus, in the code below these exceptions are supposed to be handled in catch (...) block.

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}

However when OnInitDialog throws an exception an assert appears (in debug mode) after running the windows destructors. Even if i call to EndDialog(m_hWnd, IDCANCEL) in the CMyPropertySheet destructor the assert remains. Could you please help to detect what is missing or wrang? I use WTL. My a property sheet claa is derived from CPropertySheetImpl.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叫嚣ゝ 2024-11-24 10:36:49

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

You can't safely pass exception through C interfaces (like CreateDialog, DispatchMessage etc..). You must catch them all before they escape from the window procedure, transfer them somehow to the caller, and then rethrow them from there. You can do it generically in C++0x, but you probably don't have support for it yet. Try using boost::exceptions to approximate it in C++03.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文