У меня есть хитрая комбинация C #, C ++ / CLI и собственного кода C ++. Короче что я имею:
Windows.Froms.Form
класс в нем, который показан DLLЯ показываю свою форму C # из DLL C ++ / CLI с ShowDialog
метод:
System::Reflection::Assembly^ GUI = System::Reflection::Assembly::LoadFrom("MyCppDll.dll");
Type^ FormMain = GUI->GetType("MyCsNamespace.FormMain");
MethodInfo^ ShowDialog = FormMain->GetMethod("ShowDialog", gcnew array<Type^>{});
System::Object^ form = System::Activator::CreateInstance(FormMain, args);
ShowDialog->Invoke(form, nullptr);
Все работает нормально, за исключением того, что я не знаю, как обрабатывать исключения, которые могут генерироваться во время выполнения формы. Я желаю ShowDialog->Invoke
вызов просто выбрасывает эти исключения, но это не так.
Я пытался установить AppDomain::UnhandledException
обработчик в C ++, но он не срабатывает. Странно, я пытался установить его в C #, но он тоже не срабатывает.
Итак, как мне обрабатывать исключения в C ++ DLL, которая выбрасывается в C # сборки в этой ситуации? У меня есть полный контроль над кодом C ++ и C #, но хост-приложение закрыто.
ShowDialog->Invoke
сгенерирует исключение TargetInvocationException; InnerException этого будет исключением, которое бросает форма.
Других решений пока нет …