用消息抛出SEH异常

时间:2015-04-23 14:58:02

标签: c++-cli seh

我使用C ++ / CLI包装器库从C#应用程序调用C ++库。在C ++代码中,我想在出现问题时抛出异常。它在被管理的世界中被翻译成SEHException。但是,原始异常所包含的消息自然消失了。

如何将此消息传播到C#?

  • 我可以以某种方式设置翻译,例如MyCppException被转换为MyManagedException整理邮件?
  • 我可以以某种方式抛出异常,使SEHException包含一条消息吗?

我想避免在所有C ++ / CLI包装器函数中捕获异常并尽可能重新抛出。

// C++ cpp.h
class MyException { const char* what() const { return "OH HI THERE"; } };
MyException e;
void throw_function()
{
    throw e;
}

// Wrapper
#include "cpp.h"
public ref class A
{
public:
    static Throw() { throw_function(); }
}

public ref class E: public Exception
{
    System::String^ GetMessage();
}    

// App.cs
try
{
    A.Throw()
}
catch (E e)    
{
    Console.WriteLine(e.GetMessage()); // I would like to do something like this...
}
catch (SEHException seh)
{
    Console.WriteLine(seh.Message); // Or this...
}

0 个答案:

没有答案