我有一个复杂的 C#、C++/CLI 和本机 C++ 代码组合。简而言之,我所拥有的:
- 第三方托管应用程序,即 Visual Studio 2010 进程
- 由该进程加载的 C++/CLI dll,即Evaluator Add-In
- 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# 代码,但主机应用程序已关闭。