我正在爲引發異常的現有本機類寫一個.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. 異常處理的最佳實踐
- 6. OData異常的最佳實踐
- 7. 處理Java異常的最佳實踐
- 8. Python異常處理 - 最佳實踐
- 9. 異常處理最佳實踐
- 10. 異常記錄器:最佳實踐
- 11. 最佳實踐 - 異常處理
- 12. 異常投擲最佳實踐
- 13. 最佳實踐拋出異常
- 14. 異常處理最佳實踐
- 15. 處理PyMySql異常 - 最佳實踐
- 16. Android包裝結構最佳實踐
- 17. AS3裝載機類的最佳實踐
- 18. vue-i18n翻譯中html標籤的最佳實踐?
- 19. 類最佳實踐
- 20. 異步Webrequest最佳實踐
- 21. Node.js的最佳實踐異常處理 - 在異步/等待
- 22. Git安裝最佳實踐
- 23. 安裝 - 最佳實踐
- 24. 基於ANTLR的翻譯器的結構(最佳實踐)
- 25. 異常在Java中處理有Java的最佳實踐
- 26. 在Spring中處理異常的最佳方法和實踐?
- 27. 在.NET中進行驗證最佳實踐的異常處理
- 28. 包升級最佳實踐
- 29. 單元測試的最佳實踐枚舉翻譯器
- 30. Zend的最佳實踐用圖像翻譯?