0
考慮下一段代碼:
MFC CDatabase :: OpenEx函數如何知道它在try/catch塊中?
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()
(TRY,CATCH_ALL等)中使用的MFC特定宏以及它們提供的AFX_EXCEPTION_LINK結構有關,但仍然無法獲得整個圖像。
謝謝。
您捕獲併吞下該錯誤。 MessageBox可能由頂級捕獲顯示。 – quantdev
@quantdev是的,看起來你是對的,奇怪的是我沒有考慮到頂級水平。請把你的評論寫成問題,我會接受。 – Apokal