我有以下函数捕获ComObject的系统异常并抛出我自己的异常:
int TReader::ExecSQL(...) {
try {
// ...
} catch (Comobj::EOleException& e) {
throw myDBError("TReader::Open", "TReader", e.Message);
}
// ...
}
我无法抓住自己的异常,总是得到#34;异常未知!"!为什么呢?
void main() {
try {
ExecSQL(...);
} catch(myDBError& e) {
log(e.Message);
} catch(...) {
log("Exception unknown!");
}
}
答案 0 :(得分:7)
改为使用catch(const myDBError& e) {
。
匿名临时无法绑定到非const引用,因此不会在当前捕获站点拦截throw
。
答案 1 :(得分:-1)
如果try-catch
块生成的不是Comobj::EOleException
,而是生成其他内容,则可能会出现问题。
同时检查,也许myDBError
构造函数生成另一个异常,另一种类型:-)
这将是最有趣的解释,为什么你不能抓住myDBError
,但仍然抓住了一些东西: - )