zoukankan      html  css  js  c++  java
  • lua语言自学知识点----Lua与.Net相互调用

    知识点:

    LuaInterface作用是用来完成Lua与C#的相互调用.

    LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级)

                                    2.luanet.dll          用于lua读取C#(放在bin/debug目录下)

    写C#脚本时如用到lua,则将luainterface.dll luanet.dll 导入工程,同时引用 using luainterface.dll; 

    这样就直接可以引用

         Lua   xt =new Lua();

    赋值: xt["num"]=2;

            xt["str"]="a string";

            xt.newtable("mytable");创建新表格

    在C#总执行lua文件

    1). xt.DoString("num"=2);

        xt.DoString("str =' a string ' ");

       object [] obj =xt.DoString("return str ,num");

       foreach (object  j in obj)

        {Console.WriteLine(j);  }

    2). xt.DoFile("mylua.xt");---------C#编码

        --------------以下是lua编码------------------

        (注意编码格式为ANSI)

    str ="a string"

    num=2

    print(str,num)

    3). C#语言与lua语言对应关系

    Lua                                  C#

    nil                                  null

    string                            system.string

    number                        system.double

    boolean                        system.Boolean

    table                            luainterface.Luatable

    function                       luainterface.function

    把C#方法注册到Lua的一个全局方法

    一.类中普通方法注册到lua中

    1). public void NomalMethod()//普通方法

        {

        cw....

        }

    2). Program tempProgram =new Program ();  

    3).xt.RegisterFunction("NewMethod",tempProgram ,tempProgram.GetType().GetMethod("NomalMethod") );

    4).xt.DoString("NewMethod()");            //执行

    二.类中静态方法注册到lua中(只是将第三步的第二个参数换为null)

    1). public static void MyStaticMethod()//普通方法

        {

        cw....

        }

    2). Program TempProgram =new Program ();  

    3).xt.RegisterFunction("NewStaticMethod", null,TempProgram.GetType().GetMethod("MyStaticMethod") );

    4).xt.DoString("NewStaticMethod()");            //执行

     

     在lua中使用C#的类

    1). require "luanet"-----------------luanet是库,需要放对位置

    2). luanet.load_assembly("System") --加载C#系统

    3).int32=luanet. import_type("System.Int32") --定义int32

    4). num=int32.Parse("3456")-----.Parse为C#中静态方法此时已被调用

    print(int32)  

    print(num)

    lua中访问C#的属性和方法

    属性:obj.name

    函数:obj:method()

     -------------------C#脚本----------------------------------

    namespace  Test

    {

    class testProgram()

    {

    public string name ="myname";

    public void testMethod()

    {

    cw....

    }

    }

    }

      -------------------lua脚本----------------------------------

     

    1). require "luanet"-----------------luanet是库,需要放对位置

    2). luanet.load_assembly("Test") --加载C#系统

    3).Myprogram=luanet. import_type("Test.tastProgram") --定义int32

    4).Myprogram001=Myprogram()-----new一下

    5).print(Myprogram001.name)

        print(Myprogram001:testMethod)

    -------------------------------------------------------------------------

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    iOS 进阶 第一天(0323)
    iOS 基础 第五天(0811)
    iOS 基础 第四天(0809)
    iOS 基础 第三天(0808)
    iOS 基础 第三天(0807)
    iOS 基础 第二天(0805)
    iOS 基础 第一天(0804)
    Mac 启用http-dav功能(WebDAV服务器)
    【转】phpmyadmin万能密码漏洞
    关于python文件操作 (转载)
  • 原文地址:https://www.cnblogs.com/Future-Better/p/9915722.html
Copyright © 2011-2022 走看看