我有一个使用 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...
}