2

C# 内で Javascript を実行し、C# と Javascript の間で変数を渡したいと考えています。

これを行うための現在の安定した方法は ClearScript のようです。

次のような JavaScript 関数があります。

var b = a[0];
var c = a[1];
var d = a[2];
var e = a[3];
rtnstr = "{errmsg: 'calculation never ran'}";

calculation()

function calculation() {
   rtnstr = "{ one:'" + a+b "', " two:'" + c+d + "'}";
}

a配列を渡して文字列をフェッチするClearScriptでそれを呼び出すにはどうすればよいですかrtnstr

この URL を見つけました: https://clearscript.codeplex.comは、整数の配列を取得する方法を示しています。1 つの文字列を取得するために必要です。

また、変数を渡す方法も知っておく必要があります。この例はそれを示していません。

4

3 に答える 3

4

あなたがまだこれを必要としているかどうかはわかりませんが、私はあなたの質問に出くわし、試してみました.

まず、JS ファイルをソリューションに追加します。

ソリューションに JavaScript ファイルを追加します。

次に、JavaScript ファイルに JavaScript を追加します。

var myArray = [0,1,2,3];
var a = myArray[0];
var b = myArray[1];
var c = myArray[2];
var d = myArray[3];
var rtnstr = "{errmsg: 'calculation never ran'}";

function calculation() {
   var one = a + b;
   var two = c + d;
   rtnstr = "{ one:'" + one  + "', two:'" + two + "'}";
   return rtnstr;
}

C# コードで、次のようにします。

using System;
using System.IO;
using Microsoft.ClearScript.V8;

namespace ClearScriptConsole
{
    class Program
    {
        static void Main(string[] args) {

            V8ScriptEngine _v8Engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);

            string jsFilePath = @"..\..\HelloWorld.js";
            string jsContents = File.ReadAllText(jsFilePath);

            _v8Engine.Execute(jsContents);

            var returnedVal = _v8Engine.Script.calculation();
            Console.WriteLine(returnedVal);
        }
    }
}

そして、返された値は私に次のことを与えました:

コンソール ウィンドウに表示される計算結果。

乾杯

于 2016-12-05T12:05:33.380 に答える
3

私はかなり遅れており、1ドル不足していますが、別の解決策があります. Intellisenseに出くわす前に、簡単な答えを探していました。ClearScript の「Invoke」メソッドを探しているようです。

次のような JavaScript 関数があるとします。

function calculation(a) {
    var b = a[0];
    var c = a[1];
    var d = a[2];
    var e = a[3];

    return `{{ one: ${(b + c)}, two: ${(d + e)} }}`;
};

int の配列を使用して C# から呼び出したいこと:

var rtnstr = engine.Invoke("calculation", new int[] { 1, 2, 3, 4, 5 });

ClearScript 5.6 で考えられるバグ: 関数変数が気に入らないようです。私はもともと関数を次のように宣言しようとしました:

const calculation = (a) => {
    var b = a[0];
    var c = a[1];
    var d = a[2];
    var e = a[3];

    return `{{ one: ${(b + c)}, two: ${(d + e)} }}`;
};

しかし、「メソッドまたはプロパティが見つかりません」という例外を受け取りました。ただし、グローバルスコープで単純な古い関数として宣言することは機能します。

于 2019-12-04T14:13:25.030 に答える
1

私はこれに取り組んでおらず、ドキュメントを使用してドットを接続しようとしていることに注意してください。

using Microsoft.ClearScript.V8;

public static void Main(string[] args)
{
    var engine = new V8ScriptEngine();
    engine.AddHostObject("a", args);    // it looks like a is the name of the variable that wil be used by script to refer to host object which is args in this case

    engine.Execute(".... your javascript code ....");
    var returnStr = engine.Script.rtnstr;
}   
于 2016-03-10T03:41:52.463 に答える