c# - 在 C++/CLI 中处理 C# 异常

标签 c# c++ visual-studio-2010 exception c++-cli

我有一个 C#、C++/CLI 和 native C++ 代码的巧妙组合。简而言之,我有:

  1. 第三方管理的应用程序,即 Visual Studio 2010 进程
  2. 此进程加载的 C++/CLI dll,即 Evaluator Add-In
  3. 一个包含 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/

相关文章:

c++ - 在头文件中使用模板

c# - 如何让我的服务停止自动发布到 Windows 应用程序事件日志中

visual-studio-2010 - 团队基础服务器 "Build Controller"

c# - 使用 MVC Razor 传递列表对象

c# - 如何获取字符串的特定部分并将它们分配给 C# 中的变量?

C# 如何调整来自另一个类的表单中的文本框属性?

c++ - 不透明指针应该使用未命名的结构还是未定义的标记来实现?

c++ - 如何插入到已排序的单链表中?

wpf - 链接内容不适用于资源词典

c# - Linq 可选参数