gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:23:47 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com