ChakraCore wrapper in C#
UnityでChakraCoreを使うために作ったものです
今のところLinuxなどでのネイティブバイナリライブラリとの連携方法に詳しくないのでwindowsでしか試しておりません。
.NET 3.5 で動作テストしております。
var c = new ChakraSharp.Controller();
c.Evaluate("function jsfun1(v) { return +v + 100; };");
System.Console.WriteLine(c.Evaluate("jsfun1(10)").ToDouble());
//-> 110
var c = new ChakraSharp.Controller();
c.Global["clrmath"] = c.Wrap(typeof(System.Math));
System.Console.WriteLine(c.Evaluate("clrmath.Sin(0.1)").ToDouble());
//-> 0.09983341664
var c = new ChakraSharp.Controller();
c.Global["System"] = c.WrapNamespace("System");
var js = @"
(function() {
var sb = new System.Text.StringBuilder();
sb.Append(""abc"");
sb.Append(""ABC"");
sb.Append(123);
return sb.ToString();
})()
";
System.Console.WriteLine(c.Evaluate(js).ToString());
//-> abcABC123
var c = new ChakraSharp.Controller();
var o = c.Evaluate("({a:1, b:2})");
var f = c.Evaluate("(function(v){ return this.a + this.b + v; })");
System.Console.WriteLine(f.Call(o, 10).ToDouble());
//-> 13
var c = new ChakraSharp.Controller();
c.Evaluate("function jsfun1(v) { return +v + 100; };");
System.Func<double, double> jsfun1 = c.Global["jsfun1"].ConvertTo<System.Func<double, double>>();
Console.WriteLine(jsfun1(40));
//-> 140
var c = new ChakraSharp.Controller();
ChakraSharp.JSValue jsval = c.Evaluate("({a:2})");
var fun = c.Evaluate("(function (v) { return v.a; })").ConvertTo<System.Func<ChakraSharp.JSValue, double>>();
System.Console.WriteLine(fun(jsval));
//-> 2