我正在为抛出异常的现有本机类编写 .NET 包装类。在本机 C++ 异常和托管异常之间进行转换的最佳实践是什么?一对一地捕获并重新抛出(例如 std::invalid_argument -> System.System.ArgumentException)?是否已经在某处绘制了映射?
据我所知,没有标准映射。我过去所做的就是翻译我所知道的内容,以及 System.Runtime.InteropServices.SEHException 的 catch 块。所有未翻译的异常都将转换为该异常。只要您有抛出异常的代码的调试版本,您就应该获得不错的堆栈跟踪。然后你可以去查看异常并编写包装器。
但在我必须执行此操作的上一个项目中,我采用了更简单的方法,最终为逻辑错误和运行时错误编写了几个 System.Exception 派生类。然后我会捕获这 2 个基类并使用 typeid(err) 写入抛出的 .NET 消息。这样我就不会“丢失”C++ 抛出的内容,但也不必映射除最重要的之外的所有内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)