首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC CDatabase::OpenEx函数如何知道它在try/catch块中?

MFC CDatabase::OpenEx函数如何知道它在try/catch块中?
EN

Stack Overflow用户
提问于 2014-07-23 10:49:45
回答 1查看 836关注 0票数 0

考虑下一段代码:

代码语言:javascript
复制
void CMyDB::Connect()
{
    //db_ is an member object of CDatabase class
    //connStr is previously defined connection string
    db_.OpenEx(connStr, CDatabase::noOdbcDialog);
}

执行Connect() --如果连接字符串包含错误数据,则将显示一个包含错误描述的消息框。

现在,如果我将对Connect()的调用包装在try/catch块中,则不会显示消息框,而是会引发异常:

代码语言:javascript
复制
void CMyDB::Connect()
{
    try {
        result = db_.OpenEx(connStr, CDatabase::noOdbcDialog);
    }
    catch(CDBException* e) { }
}

现在,我不明白OpenEx()是如何理解它被try/catch块包装的,并且不需要显示带有错误描述的消息框。我知道它与在OpenEx()中使用的MFC特定宏(尝试、CATCH_ALL等)有某种关系。和他们提供的AFX_EXCEPTION_LINK结构,但仍然不能得到整个画面。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-23 10:57:49

它不知道。

您的catch确实吞下了异常,即(在添加try/catch之前)抛出到程序中的顶级捕获。此顶层捕获显示了带有错误消息的对话框。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24908428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档