[英]Why is this exception not being caught across DLLs?
我有一個DLL拋出異常,如下所示:
throw POMException(err, drvErr, errmsg);
調用代碼在一個單獨的程序中,並有一個try,catch塊,如下所示:
try
{
// function in separate DLL
}
catch (TXNPDO_Exception& e)
{
SR_PERFLOG_MSG(SR_PERFMASK_SELECT, "ERROR selectInStages");
TXNDBO_THROW(e);
}
在包含的文件中定義TXNPDO_Exception
:
#define TXNPDO_Exception POMException
在調試器中運行它時,它指出POMException
未處理。 我甚至添加了一個catch(...)
子句,但仍未處理。
我懷疑這與Visual C ++編譯參數有關,因為所討論的DLL庫是一個遺留庫,它是與調用它的程序分開編譯的。 我正在使用Visual Studio 2003。
DLL cpp文件使用以下(相關)標志進行編譯: /X /GR /Ob1 /Zi /GX /Od /MDd /LD
。 正確處理調用程序中的其他異常。
任何人都可以提供為什么這個異常沒有傳播到調用程序的原因?
編輯:
之前使用可能的構建環境和代碼更改編譯了DLL庫,這些更改對我來說是不可用的。 先前編譯的庫正確地傳播異常。
我正在使用相同的編譯器編譯客戶端程序,主要使用相同的開關: -Od -W3 -Z7 -MDd -GX -GR -Zm800
(no /X
或/Ob1
和/Z7
而不是/Zi
)。
我終於弄明白了問題是什么,在這種特殊情況下,它與在DLL之間拋出異常無關。
由於在調用堆棧中進一步安裝了異常處理程序掛鈎,因此會發生此問題。 我通過向庫中的每個級別添加try,catch(...)塊來診斷這一點,直到找到未傳播異常的點。 當我注釋掉異常處理程序鈎子注冊代碼時,異常成功傳播。
我現在必須弄清楚異常處理程序掛鈎的工作方式,這超出了本問題的范圍。 感謝所有分享他們答案的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.