我有一些本机 C++ 类库,我将它们封装在 C++ .NET 中,然后从 C# 调用它们(三层!)。
我可以从 C++ .NET 中抛出异常,并愉快地在 C# 中捕获它们。问题是,我捕获本机 C++ 异常的唯一方法是捕获 System.Exception,这很好,但在从 std::exception 到 System.Exception 的转换中,我丢失了有关错误的绝大多数信息(例如例如错误消息!)。我可以捕获 C++ .NET 层中的本机异常并作为 .NET 异常重新抛出,但这是一种侵入式解决方案,需要我在每个 C++ .NET 方法调用周围放置 try-catch 块(以捕获本机异常并重新抛出) 。
有没有其他解决方案可以做到这一点,或者我只能亲自动手......
您将不得不亲自动手,但您可以通过创建预处理器宏来封装所有重复的 catch 逻辑,从而大大减少工作量。
我假设您想要捕获几种不同类型的异常,例如MFC CException、std::Exception 以及 SEH 异常。
You might还想编写包装函数来返回 HRESULTS 并使用 SetErrorInfo(即转换为 COM 错误代码和错误信息) - 您可能会认为这为 .Net 提供了一个更清晰的接口,可以很好地将其转换为 .Net 异常。这将避免对 C++.Net 层的需要,并允许您使用 P/Invoke,并使其可从 VBA 调用。
或者你可能不会...只是指出选项!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)