Последствия выброса исключения в делегате неуправляемого обратного вызова

Каковы последствия или неосознанные последствия выброса исключения внутри делегата, который используется во время неуправляемого обратного вызова? Вот моя ситуация:

Неуправляемый C:

int return_callback_val(int (*callback)(void))
{
  return callback();
}

Управляемый C #:

[DllImport("MyDll.dll")]
static extern int return_callback_val(IntPtr callback);

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int CallbackDelegate();

int Callback()
{
  throw new Exception();
}

void Main()
{
  CallbackDelegate delegate = new CallbackDelegate(Callback);
  IntPtr callback = Marshal.GetFunctionPointerForDelegate(delegate);
  int returnedVal = return_callback_val(callback);
}
5
задан ken 29 November 2011 в 18:13
поделиться