考虑下一段代码:
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块中,则不会显示消息框,而是会引发异常:
void CMyDB::Connect()
{
try {
result = db_.OpenEx(connStr, CDatabase::noOdbcDialog);
}
catch(CDBException* e) { }
}现在,我不明白OpenEx()是如何理解它被try/catch块包装的,并且不需要显示带有错误描述的消息框。我知道它与在OpenEx()中使用的MFC特定宏(尝试、CATCH_ALL等)有某种关系。和他们提供的AFX_EXCEPTION_LINK结构,但仍然不能得到整个画面。
谢谢。
发布于 2014-07-23 10:57:49
它不知道。
您的catch确实吞下了异常,即(在添加try/catch之前)抛出到程序中的顶级捕获。此顶层捕获显示了带有错误消息的对话框。
https://stackoverflow.com/questions/24908428
复制相似问题