zoukankan      html  css  js  c++  java
  • C#调用脚本语言(二) IronJS基本语法

    源代码下载地址:git://github.com/fholm/IronJS.git

    GitHub地址:https://github.com/fholm/IronJS

    IronJs.DLL 0.2.0.1下载:https://files.cnblogs.com/comsokey/IronJS0.2.0.1.zip

     C# 调用JS方法

     class Program
        {
            static void Main(string[] args)
            {
                var v = new IronJS.Hosting.CSharp.Context();
    
                // 创建JS方法
                v.Execute("function sayHello(str){ return {msg:'Hello ,' + str};}");
    
                // 通过JS代码调用JS方法返回值
                dynamic dy = v.Execute("sayHello('JS Call');");
                
                Console.WriteLine(dy.msg);
    
    
    
    
                // 创建JS方法
                v.Execute("function sayHello2(str){ return {msg:'Hello ,' + str.msg};}");
    
                // 映射JS方法到指定的delegate上
                dy = v.GetFunctionAs<GetWithMyClass>("sayHello2");
    
                // 调用JS方法
                dy = dy(new MyClass() {msg = "C# Call"});
                //
                Console.WriteLine(dy.msg);
    
    
    
                Console.ReadKey(true);
    
            }
    
            private delegate dynamic GetWithMyClass(MyClass myClass);
        }
    
        class MyClass
        {
            public string msg;
        }

    JS调用C#方法

                var v = new IronJS.Hosting.CSharp.Context();
    
                // 创建C#方法代码
                Action<string> action = new Action<string>((str) => Console.WriteLine("C#方法接收到的参数:{0}", str));
    
                // 创建FunctionObject
                FunctionObject fun = IronJS.Native.Utils.createHostFunction(v.Environment, action);
    
                // 绑定方法
                v.SetGlobal("WriteLine", fun);
                
                //调用
                v.Execute("WriteLine('12313');");

    传递C#实例

                var v = new IronJS.Hosting.CSharp.Context();
                
                MyClass myClass = new MyClass(){msg = "C#实例"};
    
                // 将实例映射到JS变量
                v.SetGlobal("myClass",myClass);
    
                // 创建JS方法
                v.Execute("function sayHello(){ return {msg:'Hello ,' + myClass.msg};}");
    
                // 通过JS代码调用JS方法返回值
                dynamic dy = v.Execute("sayHello();");
                
                Console.WriteLine(dy.msg);

    获取JS变量/解析Json

            static void Main(string[] args)
            {
                var v = new IronJS.Hosting.CSharp.Context();
    
                string strJson = " var json ={参数1:'json参数1',参数2:{参数21:1,参数22:2},参数3:[1,2,3]};" +
                                 " var json2 ={参数1:'json2参数1',参数2:{参数21:1,参数22:2},参数3:[1,2,3]};";
    
                // 运行代码,获取最后一个变量。(本例中返回Json2)
                dynamic dy2 = v.Execute(strJson);
    
                // 获取指定JS变量值
                dynamic dy1 = v.GetGlobalAs<dynamic>("json");
    
                // 打印数据
                Print(dy1);
    
                // 打印数据
                Print(dy2);
    
                Console.ReadKey(true);
    
            }
    
            private static void Print(dynamic dy1)
            {
                Console.WriteLine("参数1:{0}",dy1.参数1);
                Console.WriteLine("参数21:{0}", dy1.参数2.参数21);
                Console.WriteLine("参数22:{0}", dy1.参数2.参数22);
                for (int i = 0; i < dy1.参数3.length; i++)
                {
                    Console.WriteLine("参数3[{1}]:{0}", dy1.参数3[i],i);
                    
                }
                
            }

    注意:

      调用JS方法时,传递参数为一个类实例,在JS方法中无法修改属性值。(不知道是不是测试的语句不正确)  

      但是可以通过将实例转化成Json对象进行传递,但该方法仅能解决简单类的实现。

    PS:

      简单类可以时间,但是在传入传出时需要序列化成Json

    (未完待续)

  • 相关阅读:
    java基础——DecimalFormat
    剑指——重建二叉树
    error error: illegal character: 'u3000'
    Android: Unhandled exception java.net.malformedurlexception 异常笔记
    Android获取系统时间
    java基础——hashCode笔记
    golang 红黑树
    golang 实现跳表skiplist
    快排
    堆排序
  • 原文地址:https://www.cnblogs.com/comsokey/p/IrconJS.html
Copyright © 2011-2022 走看看