mfccdatabase::OpenEx函数如何知道它在try/catch块中
How does MFC CDatabase::OpenEx function knows it is in try/catch block?
考虑下一段代码:
void CMyDB::Connect()
{
//db_ is an member object of CDatabase class
//connStr is previously defined connection string
db_.OpenEx(connStr, CDatabase::noOdbcDialog);
}
执行Connect()
后——如果连接字符串包含错误的数据,则显示错误描述的消息框。
现在,如果我在try/catch块中包装对Connect()
的调用,将不会显示消息框,而是抛出一个异常:
void CMyDB::Connect()
{
try {
result = db_.OpenEx(connStr, CDatabase::noOdbcDialog);
}
catch(CDBException* e) { }
}
现在,我不明白OpenEx()
是如何理解它被try/catch块包装的,没有必要显示带有错误描述的消息框。我知道它在某种程度上与OpenEx()
内使用的MFC特定宏(TRY, CATCH_ALL等)和它们提供的AFX_EXCEPTION_LINK结构有关,但仍然无法获得全貌。
谢谢。
它不知道。
您的catch
确实吞下了异常,该异常是(在您添加try/catch
之前)抛出到程序中的顶级捕获中。
相关文章:
- 我正在尝试理解代码块中的这些错误
- 如何在代码块中安装 gtkmm?
- 为什么向量不在代码块中运行?
- 代码块中无序多集的编译错误17.12
- 调试代码块中的数组
- 堆分配对于大型块中的分页是否更有效?
- 在功能块中使用新运算符时存在于堆或堆栈上?
- RapidXML 节点在 try catch 块中具有正确的值,但它在块外为 nullptr
- std::unique_ptr 在 try-catch 块中未捕获取消引用异常
- 何时删除 try-catch 块中的指针
- 在尝试块中的一个语句中是否有例外情况导致控制流程绕过try块中的所有剩余语句
- 从catch块调用异常类中的函数并不是打印从try块传递的值
- 在try-catch语句中的try块和所有catch时钟的末尾执行相同的操作
- 为什么在try块中初始化文件指针会导致管道破裂
- mfccdatabase::OpenEx函数如何知道它在try/catch块中
- Visual c++ 2008中的函数try块
- 在try-catch块中包装循环是否会导致性能问题?
- 将主应用程序对象包含在 try-catch 块中捕获所有崩溃
- 在try catch块中未捕获异常
- 从构造函数捕获Exception,而不将对象隐藏在try块中