我正在爲引發異常的現有本機類寫一個.NET包裝類。在本地C++異常和受管異常之間進行翻譯的最佳實踐是什麼?捕獲並重新拋出一對一的基礎(例如std :: invalid_argument - > System.System.ArgumentException)?有沒有已經繪製過的地圖?在C++/CLI包裝類中翻譯異常的最佳實踐
4
A
回答
4
沒有我知道的標準映射。我過去所做的是翻譯我所瞭解的那些,以及System.Runtime.InteropServices.SEHException的catch塊。所有未翻譯的異常都將變成該異常。只要你有拋出異常的代碼的調試版本,你應該得到一個很好的堆棧跟蹤。然後你可以去查看異常並編寫包裝器。
但在最後一個項目,我不得不這樣做,我的東西就簡單多了,我最後寫一對夫婦System.Exception的衍生物爲logic_error和runtime_error。然後我會捕獲這兩個基類,並使用typeid(err)編寫拋出的.NET消息。這樣我就不會「丟失」從C++拋出的東西,但不必映射除最重要的東西外的所有東西。
2
一對一映射對我來說似乎是最熱門的方法。由於特定於應用程序的異常,「通用」映射幾乎不可能,儘管STL異常類有一些明顯的映射。
也有是從非託管代碼SEH異常的問題。根據您的情況,可能需要抓住幷包裹它們。
2
我認爲這取決於包裝的設計。如果管理器包裝器的接口將與非託管庫的接口幾乎相同,則重新引發異常1:1。如果您要顯着改變界面,那麼會拋出最適合新界面的異常。無論哪種方式,確保每當無法完成操作以符合.NET設計準則時,包裝就會拋出異常。
1
你真的想做什麼?
互操作已經轉換原生的例外管理,包括SEH例外。但是,良好的設計規定,應在本機API級別捕獲所有異常。除非有充分的理由,否則你不應該偏離這一點。我們對你的設計不夠了解。
相關問題
- 1. PHP翻譯類 - 最佳實踐意見
- 2. 在實用程序類中拋出異常的最佳實踐
- 3. 處理異常的最佳實踐
- 4. 異常處理的最佳實踐
- 5. Python異常處理 - 最佳實踐
- 6. 異常記錄器:最佳實踐
- 7. 處理PyMySql異常 - 最佳實踐
- 8. 異常處理最佳實踐
- 9. AS3裝載機類的最佳實踐
- 10. vue-i18n翻譯中html標籤的最佳實踐?
- 11. Node.js的最佳實踐異常處理 - 在異步/等待
- 12. 異步Webrequest最佳實踐
- 13. 基於ANTLR的翻譯器的結構(最佳實踐)
- 14. Git安裝最佳實踐
- 15. 安裝 - 最佳實踐
- 16. 異常在Java中處理有Java的最佳實踐
- 17. 在.NET中進行驗證最佳實踐的異常處理
- 18. Yii2翻譯動態內容的最佳實踐
- 19. Zend的最佳實踐用圖像翻譯?
- 20. 包升級最佳實踐
- 21. 在庫中包裝第三方服務的最佳實踐
- 22. 在Java中以類似的方式處理多個異常的最佳實踐
- 23. 異常報告中的多個查詢的最佳實踐
- 24. Winforms窗體處理最佳實踐中的Sql異常
- 25. 最佳實踐 - 服務/ dao /業務層中的異常處理
- 26. 從C#中捕獲SQL異常的最佳實踐
- 27. 在django服務器上安裝軟件包的最佳實踐
- 28. 包含屬性中類型的庫中DI的最佳實踐
- 29. Scala的類型類的最佳實踐
- 30. 最佳實踐