gpt4 book ai didi

c++ - 从属性表页面的处理程序中抛出的异常

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:26 29 4
gpt4 key购买 nike

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

try {

CMyPropertySheet sheet;
sheet.DoModal();

} catch (...) {

// i want to handle an exception here

}

然而,当 OnInitDialog 抛出异常时,在运行 Windows 析构函数后会出现一个断言(在 Debug模式下)。即使我在 CMyPropertySheet 析构函数中调用 EndDialog(m_hWnd, IDCANCEL),断言仍然存在。你能帮忙检测一下丢失或损坏的东西吗?我使用 WTL。我的属性表 claa 派生自 CPropertySheetImpl。

谢谢。

最佳答案

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

关于c++ - 从属性表页面的处理程序中抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489673/

29 4 0
文章推荐: java - Spring Batch - 如果运行作业时数据库访问失败
文章推荐: javascript - 使用 Canvas 进行像素完美的 2D 鼠标拾取
文章推荐: html - 为什么我的 CSS 选择器 "body div span a"匹配 "
"
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com