マネージド (.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 のようなネイティブ フィルターを設定することにより、ネイティブ スタック トレースでネイティブ例外を再発生させることです。参考までに。