0

C# アプリケーションで Jint 2.0 を使い始めたところです。ただし、Jint 内から値を取得できないようです。

サンプルコードが提供されていても:

            var engine = new Jint.Engine();
            engine.Execute(@" function add(x, y) {   return x + y;  } var z = add(3, 2);");

            var z = engine.GetValue("z");
            Console.WriteLine(z); // -> 5

var z = engine.GetValue("z"); が InvalidCastException をスローしています (指定されたキャストが無効です)

これがサンプルコードであることを考えると、私が見逃している単純なものはありますか?

更新:「GetValue」を「GetGlobalValue」に変更すると、機能するようになりました。これがなぜなのか知りたいので、質問を開いたままにします。

4

1 に答える 1

2

バージョン 2.1.0.0 にアップグレードしてください。この最新バージョンでコードを試しましたが、InvalidCastException はスローされません。最新バージョンには、いくつかの変更とバグ修正が含まれています。簡単に説明すると、2.0 では、GetGlobalValue 関数は最初にグローバル スコープから値オブジェクト自体を取得し、それを GetValue 関数に渡します。バージョン 2.1 ではこれが組み合わされているため、InvalidCastException がスローされることはありません。

また、engine.GetValue 関数は常に JsValue オブジェクトを返すことも知っておくとよいでしょう。値を Double として返す AsNumber() 関数を追加できます。

        var engine = new Jint.Engine();
        engine.Execute(@" function add(x, y) {   return x + y;  } var z = add(3, 2);");

        var z = engine.GetValue("z").AsNumber();
        Console.WriteLine(z); // -> 5

ドキュメントがほとんどないため、https://github.com/sebastienros/jint/tree/master/Jint.Tests/Runtimeで Jint 用に記述されたテストを参照することをお勧めします。

于 2014-05-29T22:02:16.323 に答える