我正在尝试接收有关我在托管 (.net/c#) 的 catch 块中在本机 (c++/win32) 中抛出的异常的数据。
例如,在 c++ 中,我们可以:
void MyFunc()
{
const char* data = "my exception info";
ULONG_PTR args[1] { data };
RaiseException(0,0,1,args);
}
这个函数可以通过 C# 中的 P/Invoke 调用:
[DLLImport("MyLib.dll")]
extern public static void MyFunc();
static void Main()
{
try { MyFunc(); }
catch(SEHException seh)
{
// Where is my exception info? :(
}
}
SEHException不包含来自导入的 DLL 函数的字符串。
SEHException.ErrorCode 似乎总是 E_FAIL,但无论如何我都想编组比 int 更丰富的数据。
我是否遗漏了什么,或者是否有另一种方法可以通过异常获取此字符串数据?
目的是通过设置本机过滤器(如 SetUnhandledExceptionFilter,FYI),使用本机堆栈跟踪重新引发本机异常。