日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows核心编程 第25章 未处理异常和C ++异常(下)

發布時間:2025/6/17 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows核心编程 第25章 未处理异常和C ++异常(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 這一節東西比較少,本應該歸并在上一節里,但是昨天太晚了。就先把那些東西分為上了。這節里面就一個問題,C++異常與結構性異常的對比(try__try的區別)

C++異常與結構性異常的對比

????S?E?H是可用于任何編程語言的操作系統設施,而異常處理只能用于編寫

C?+?+代碼。如果你在編寫C?+?+程序,你應該使用C?+?+異常處理而不是結構化異常處理。理由是C?+?+異常處理是語言的一部分,編譯器知道?C?+?+類對象是什么。也就是說編譯器能夠自動生成代碼來調用C?+?+對象析構函數,保證對象的清除。

????但是也應該知道,Microsoft?Visual?C++編譯器已經利用操作系統的結構化異常處理實現了C?+?+異常處理。所以當你建立一個?C++?try塊時,編譯器就生成一個?S?E?H_?_t?r?y塊。一個C?+?+c?a?t?c?h測試變成一個S?E?H異常過濾器,并且c?a?t?c?h中的代碼變成S?E?H_?_e?x?c?e?p?t塊中的代碼。實際上,當你寫一條C++?throw語句時,編譯器就生成一個對Wi?n?d?o?w?sR?a?i?s?e?E?x?c?e?p?t?i?o?n函數的調用。用于t?h?r?o?w語句的變量傳遞給R?a?i?s?e?E?x?c?e?p?t?i?o?n作為附加的參數。

? ? 下面的代碼段可以使上面的敘述更清楚一些。左邊的函數使用?C?+?+異常處理,右邊的函數說明了C?+?+編譯器如何生成等價的結構化異常處理。


? ? 你可能注意到上面代碼中一些有趣的細節。首先,函數?R?a?i?s?e?E?x?c?e?p?t?i?o?n的調用使用了異常代碼0?x?E?0?6?D?7?3?6?3。這是由Visual?C++的開發人員選擇的軟件異常代碼,在引發C?+?+異常時使用。事實上你可以驗證這一點,方法是打開調試程序的?E?x?c?e?p?t?i?o?n?s對話框,滾動到異常列表的底部,見圖2?5?-?1?5

? ? 當引發了C?+?+異常時,總要使用E?X?C?E?P?T?I?O?N?_?N?O?N?C?O?N?T?I?N?U?E?A?B?L?E標志。C?+?+異常不能被重新執行。對于診斷C?+?+異常的過濾器,如果返回E?X?C?E?P?T?I?O?N?_?C?O?N?T?I?N?U?E?_?E?X?E?C?U?T?I?O?N,那將是個錯誤。實際上,我們看一看上面程序段右邊函數中的?_?_?e?x?c?e?p?t過濾器,就會發現它只能計算成E?X?C?E?P?T?I?O?N?_?E?X?E?C?U?T?E?_?H?A?N?D?L?E?RE?X?C?E?P?T?I?O?N?_?C?O?N?T?I?N?U?E?_?S?E?A?R?C?H

? ? 傳遞到R?a?i?s?e?E?x?c?e?p?t?i?o?n的其余參數是用來作為一種機制,用于實際引發指定的變量。被引發的變量信息是如何傳遞到?R?a?i?s?e?E?x?c?e?p?t?i?o?n的,這一點沒有公開。但不難想像編譯器的開發人員可以實現這一點。


? ? 最后要指出的是_?_?e?x?c?e?p?t過濾器。這個過濾器的用途是將t?h?r?o?w變量的數據類型同用于C?+?+c?a?t?c?h語句的變量類型相比較。如果數據類型相同,過濾器返回?E?X?C?E?P?T?I?O?N?_?E?X?E?C?U?T?E?_H?A?N?D?L?E?R,導致c?a?t?c?h塊(_?_?e?x?c?e?p?t塊)中的語句執行。如果數據類型不同,過濾器返回E?X?C?E?P?T?I?O?N?_?C?O?N?T?N?U?E?_?S?E?A?R?C?H,導致c?a?t?c?h過濾器上溯要計算的調用樹。

正常情況下,C?+?+異常處理不能使程序從硬件異常中恢復,硬件違規就是存取違規或零作除數這種異常。但微軟已經對其編譯器增加了這種支持能力。例如,下面的代碼可以防止進程不正常地結束:(VS默認是Release可以,Debug的話還是會掉相關處理函數,然后彈異常窗)


????同時catch里面還可以細分,就是判斷異常類型然后做相應處理:Visuad?C++有一種機制可以實現這一點。你需要做的是建立你自己的C?+?+類,在代碼中用來標識結構性異常。這里是一個例子:

? ? 在每個線程的進入點函數里,調用靜態成員函數?M?a?p?S?E?t?o?C?E。這個函數調用C運行時函數_?s?e?t?_?s?e?_?t?r?a?n?s?l?a?t?o?r,并傳遞?C?S?E類的?Tr?a?n?s?l?a?t?e?S?E?t?o?C?E函數的地址作為參數。通過調用_?s?e?t?_?s?e?_?t?r?a?n?s?l?a?t?o?r,告訴C?+?+運行時系統,在結構性異常發生時調用?Tr?a?n?s?l?a?t?e?S?E?t?o?C?E函數。這個函數構造一個C?S?E類對象并初始化兩個數據成員以包含有關異常的?C?P?U獨立和C?P?U依賴的信息。在構造了C?S?E對象之后,它就被引發,如同任何正常的變量可被引發一樣。現在你的?C?+?+代碼可以通過捕獲一個這類的變量來處理結構性異常。

下面是如何捕獲這個C?+?+對象的例子。

?

額...講道理是應該先輸出個111然后輸出222的吧,結果是直接崩潰了。

總結

以上是生活随笔為你收集整理的Windows核心编程 第25章 未处理异常和C ++异常(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费成人在线网站 | 欧美激情久久久久久久 | 国产精品免费91 | 日韩一区二区免费播放 | 日本一区二区三区免费电影 | 精品视频站长推荐 | 欧美女优一区二区 | 国产精品作爱 | 国产又粗又猛又爽又黄的 | 美女超碰在线 | 99热精品久久 | 茄子av在线| 一区二区三区欧美视频 | 制服 丝袜 激情 欧洲 亚洲 | 久久99热久久99精品 | 一女三黑人理论片在线 | 国产污在线观看 | 精品伦精品一区二区三区视频密桃 | 本庄优花番号 | 神马久久香蕉 | 嫩草影院懂你的影院 | 国产精品丝袜在线 | 好吊操精品视频 | 亚洲激情啪啪 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 午夜刺激视频 | 国产男女网站 | 国产成人自拍偷拍 | 老头巨大又粗又长xxxxx | 蜜臀av性久久久久蜜臀aⅴ四虎 | 99re在线精品视频 | 欧美国产视频一区 | 99久久综合| 久久中文字幕人妻 | 久久久久久久久久一区二区三区 | 粉嫩精品久久99综合一区 | 超碰在线进入 | 色姑娘久 | 国产精品人人做人人爽 | 青青草91 | 久91| 国产精品无码久久久久久电影 | 亚洲一区二区三区在线 | 尼姑福利影院 | 亚洲网视频 | avxx| 中文字幕伦理 | 婷婷精品| 免费看操片 | 亚洲国产精品视频 | 欧美性bbw| 好色综合| 波多野结衣简介 | 女人张开双腿让男人捅 | 黄网视频在线观看 | 狂野欧美性猛交blacked | 性xxxx| 精品免费久久久 | 91视频免费观看 | 国产又大又粗又爽的毛片 | 亚洲精品乱码久久 | 亚洲AV无码国产精品播放在线 | 成人午夜性视频 | 性折磨bdsm欧美激情另类 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 国产第一页视频 | 天天色网站| 五月婷婷久久综合 | 在线观看免费观看在线 | 国精产品乱码一区一区三区四区 | 男女午夜视频 | 午夜做爰xxxⅹ性高湖视频美国 | 欧美精品国产 | 中文字幕一区二区三区夫目前犯 | 国产乱码精品一区二区三区五月婷 | 国产视频第一区 | 欧美日韩视频免费 | 亚洲一区二区三区高清视频 | 青青草色视频 | 免费看又黄又无码的网站 | 国产老女人乱淫免费 | 亚洲五月天综合 | 朴银狐电影中文在线看 | 日本黄色大片网站 | 91爱爱com | 日本高清不卡一区 | 黑人一级大毛片 | 无码人妻精品一区二区中文 | 国产二区视频 | 欧美一级片免费在线观看 | 91调教打屁股xxxx网站 | 国产伦精品一区二区三区在线 | 色网址在线观看 | 狠狠做深爱婷婷综合一区 | 色婷婷av一区二区三区之红樱桃 | 激情小说在线 | 爆操少妇| 日本少妇xxxx软件 | 国产100页|