C#でP/Invokeで_set_purecall_handlerを使用するのに問題があります。
基本的に、これは機能します。
(C ++)
_set_purecall_handler(MyPureCallHandler);
void MyPureCallHandler(void)
{
// gets called
}
しかし、これはしません:
(C#)
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void PureCallHandler();
[DllImport("msvcr100.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr _set_purecall_handler([MarshalAs(UnmanagedType.FunctionPtr)] PureCallHandler handler);
_set_purecall_handler(MyPureCallHandler);
private void MyPureCallHandler()
{
// *** doesn’t get called ***
}
P / Invokeメソッドのシグネチャが正しいかどうかはわかりませんが、関数を呼び出してもエラーはスローされません(純粋な仮想呼び出しエラーでコールバックが発生しないだけです)。
バックグラウンド
例外をキャッチするために単一のC#ライブラリを使用する多数のアプリ(C ++、C ++ / CLI、およびC#)があります。これにより、さまざまなハンドラー(AppDomain.CurrentDomain.UnhandledException、SetUnhandledExceptionFilterなど)が登録され、ほとんどの例外がキャッチされます。
ただし、純粋仮想呼び出しエラーはキャッチしないため、上記の関数を登録する必要があります。