これは私の問題のMVCEです。MSScriptControlのEval関数でスローされたカスタム例外をキャッチできません
MSScriptControlを使用していくつかの数式を動的に評価するこの方法があります。
public void DoCalculate()
{
try
{
var evaluator = new Evaluator();
IScriptControl ctrl = new ScriptControl();
ctrl.Language = "JavaScript";
ctrl.AddObject("Evaluator", evaluator, false);
var calcFunction = "Number(Evaluator.Divide(4,0))";
double rs = ctrl.Eval(calcFunction);
}
catch (CustomException cex)
{
// Handle CustomException.
}
catch (Exception ex)
{
// Handle general Exception.
}
}
これはEvaluatorクラスです。
public class Evaluator
{
public double Divide(int a, int b)
{
if (b == 0)
{
throw new CustomException("Cannot divide by zero");
}
else
{
return a/b;
}
}
public void TestThrow()
{
throw new CustomException("This is a test");
}
}
はこれがCustomExceptionクラスです:
using System;
namespace Library
{
public class CustomException : Exception
{
public CustomException()
: base()
{
}
public CustomException(string message)
: base(message)
{
}
}
}
が、私はこのケースでCustomExceptionがスローされることが予想され、最初のcatch節が入力されます。しかし、私はException
(GetType().Name
を使用して例外タイプを検証しました)というメッセージを "ゼロで割り切れません"というメッセージとともに表示しました。
:
型「Library.CustomException」の例外がXXX.dllで発生したが、私は場合は、ユーザコード
で処理されていませんでしたその後、私はちょうど罰金CustomExceptionをキャッチすることができ、このように)(私のDoCalculateを変更します。
public void DoCalculate()
{
try
{
var evaluator = new Evaluator();
evaluator.TestThrow();
}
catch (CustomException cex)
{
// Handle CustomException.
}
catch (Exception ex)
{
// Handle general Exception.
}
}
んが、自分の元を定義し、スローすることは不可能であることを意味内部の評価関数からのcept?
私はこれは、このlink
COMメソッドがHRESULTs
を返すことでエラーを報告して与えられた答えをまとめたものです。NET 4.6.2およびInterop.MSScriptControl 1.0.0.0
どのようにmsscriptcontrolが動作するのか分かりませんが、多少の集約型の例外ですか?あなたの '例外 'に内部例外はありますか? –
@ChristianGollhardtいいえ、内部例外は空です。一般的な例外のメッセージは実際には私のCustomExceptionからです。 – tsukumogami
実際にどんなタイプの例外がありますか? 「例外」のみ? 'ex.GetType()。Name' –