我有拋出一個異常,像這樣一個DLL:爲什麼這個異常沒有被DLL捕獲?
throw POMException(err, drvErr, errmsg);
調用代碼是在一個單獨的程序,並且有一個嘗試,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
(無/X
或/Ob1
和/Z7
代替/Zi
)。
C++功能得不到DLL的很好的支持。 –
這可能取決於'POMException'是什麼...... – AJG85
/EH在哪裏?需要。 –