c++-cli - 包装 std::exception 并抛出 ApplicationException

标签 c++-cli

我在 c++/CLI 库中有以下代码来捕获非托管异常并重新抛出它们:

catch(const std::exception &e)
{
    String ^errorMessage = String::Format(L"Parser threw exception: {0}", gcnew String(e.what()));
    throw gcnew ApplicationException(errorMessage);
}

这是最好的方法吗?我似乎以这种方式丢失了很多信息。

最佳答案

我假设您的意思是要丢弃派生类型及其包含的任何数据。作为通用解决方案,您无能为力。当然,如果你使用库 Foo,它经常抛出 FooError,你可以 catch (const FooError& e) 并专门处理。

您还可以使用 RTTI 来发现异常的运行时类型并将其添加到 .Net 异常中。弹出来的名字有点丑。

关于c++-cli - 包装 std::exception 并抛出 ApplicationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1935954/

相关文章:

namespaces - x 不是命名空间的成员

floating-point - C++/CLI : SIGFPE, _control87,_fpreset,将古老的不受管理的Watcom C应用程序移植到.NET

visual-studio - VS2008 : Unit Testing with Code Coverage doesn't work with/CLR

c++-cli - 托管类型的全局对象

c++ - 我可以在表单应用程序的 while 循环中查询用户交互事件吗?

visual-studio-2010 - 如何在 C++/CLI 中定义字符串数组?

c# - 为什么 C# 不允许像 C++ 这样的非成员函数

c# - 从 C++/CLI 调用 C# dll 时出现 FileNotFoundException

boost - C++/Cli : Could not load file or assembly X or one of its dependencies. 不是有效的 Win32 应用程序。 (来自 HRESULT 的异常:0x800700C1)

c# - C++/CLI 包装器只能在 x86 机器上正常工作,我需要 x64 机器