2014-11-14 30 views
0

是否有可能使用VC(最好是最新版本之一)和使用C++異常,這些異常不是通過SEH實現的?注意 - 我並不是指使用C++ catch子句(/ Eha \/Ehsc)來捕捉SEH異常,我的意思是使用C++異常而不在後臺周圍飛來飛去的SEH異常。VC中的C++異常,無SEH

+2

我很想知道你的基本目標是什麼,以及你的意思是「飛來飛去」。結構化異常處理可能很複雜,但並不混亂。 – 2014-11-14 21:06:35

+0

更改我的答案,秒。這將取代運行時的這一部分(_CxxThrowException et。al。)。 – defube 2014-11-14 21:07:37

回答

0

默認情況下,C++異常是在SEH之上構建的。

可以改變這一點,但是你必須重新編寫大部分運行時,並且自己實現框架處理邏輯(閱讀爲:大量程序集)。

由於32位和64位版本(針對x86)的堆棧幀佈局存在巨大差異,因此您無法在它們之間重複使用非常多的代碼(64位EH也需要挖掘PE圖像的另一個區域)。

也就是說,除非真的需要,只要確保您的代碼儘可能便攜,就像您在其他地方使用異常一樣。大多數情況下,你可以假裝SEH甚至不在那裏。

+0

同意。 SEH只是一個關於VC如何爲C++異常實現'try' /'catch'的私人細節。除非你真的需要直接處理SEH異常,否則你必須使用'__try' /'__except'而不是'try' /'catch'來忽略SEH。 – 2014-11-14 21:42:37