1

我有一个复杂的 C#、C++/CLI 和本机 C++ 代码组合。简而言之,我所拥有的:

  1. 第三方托管应用程序,即 Visual Studio 2010 进程
  2. 由该进程加载的 C++/CLI dll,即Evaluator Add-In
  3. AC# 程序集,其中包含一个Windows.Froms.Form类,由 dll 显示

我使用以下方法从 C++/CLI dll 显示我的 C# 表单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# 程序集中抛出的 C++ dll 中的异常呢?我可以完全控制 C++ 和 C# 代码,但主机应用程序已关闭。

4

1 回答 1

2

ShowDialog->Invoke将抛出 TargetInvocationException;this 的 InnerException 将是表单抛出的异常。

于 2012-11-01T16:45:15.217 回答