1

C#、C ++ / CLI、ネイティブC++コードのトリッキーな組み合わせがあります。要するに、私が持っているもの:

  1. サードパーティの管理対象アプリケーション、つまりVisualStudio2010プロセス
  2. このプロセスによってロードされるC++/ CLI dll、つまりEvaluator Add-In
  3. クラスを含むAC#アセンブリWindows.Froms.Form。これは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呼び出しがこれらの例外をスローすることを望みますが、そうではありません。

AppDomain::UnhandledExceptionC ++でハンドラーを設定しようとしましたが、トリガーされません。奇妙なことに、C#で設定しようとしましたが、トリガーされません。

では、この状況でC#アセンブリでスローされるC ++ dllの例外をどのように処理しますか?C ++およびC#コードを完全に制御できますが、ホストアプリケーションは閉じています。

4

1 に答える 1

2

ShowDialog->InvokeTargetInvocationExceptionをスローします。このInnerExceptionは、フォームがスローする例外になります。

于 2012-11-01T16:45:15.217 に答える