我有一个 C#、C++/CLI 和 native C++ 代码的巧妙组合。简而言之,我有:
- 第三方管理的应用程序,即 Visual Studio 2010 进程
- 此进程加载的 C++/CLI dll,即 Evaluator Add-In
- 一个包含
Windows.Froms.Form
类的 C# 程序集,由 dll 显示
我使用 ShowDialog
方法从 C++/CLI dll 显示我的 C# 表单:
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
调用只抛出这些异常,但事实并非如此。
我尝试在 C++ 中设置 AppDomain::UnhandledException
处理程序,但它没有被触发。奇怪的是,我尝试在 C# 中设置它,但它也没有触发。
那么在这种情况下,如何处理 C# 程序集中抛出的 C++ dll 中的异常?我可以完全控制 C++ 和 C# 代码,但主机应用程序已关闭。
最佳答案
ShowDialog->Invoke
将抛出 TargetInvocationException;这个的 InnerException 将是表单抛出的异常。
关于c# - 在 C++/CLI 中处理 C# 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13181584/