Обработка исключений C # в C ++ / CLI

У меня есть хитрая комбинация C #, C ++ / CLI и собственного кода C ++. Короче что я имею:

  1. Управляемое стороннее приложение, а именно процесс Visual Studio 2010
  2. DLL C ++ / CLI, которая загружается этим процессом, а именно Надстройка оценщика
  3. 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 #, но хост-приложение закрыто.

1

Решение

ShowDialog->Invoke сгенерирует исключение TargetInvocationException; InnerException этого будет исключением, которое бросает форма.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector