Lua Interface基础使用

Lua是一种可爱的脚本语言,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中(多数指热更新),从而为应用程序提供灵活的扩展和定制功能.html

LuaInterface Lua语言之间是一个库集成和微软。网络平台的公共语言运行时(CLR)。Lua脚本可使用它来实例化CLR对象,访问属性、调用方法,甚至与Lua函数处理事件。(咱们使用C#调用Lua, 固然你能够用C++)windows

你须要安装如下组件网络

LuaForWindows下载地址:http://luaforge.net/projects/luaforwindows/   直接安装便可函数

LuaInterface下载地址:http://luaforge.net/projects/luainterface/    下载以后把Lua51.dll, LuaInterface.dll 加入C#项目中ui

image

 

1、练习C#访问Lua定义变量

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            //Lua解释器,每个解释器都是独立的
            Lua lua = new Lua();

           lua["num"] = 2;             //建立数字变量
             lua["name"] = "盘子脸";     //建立一个盘子脸名称
             lua.NewTable("classList");  //建立一个班级列表

              lua.DoString(@"print('hello Interface')");                         //输出hello Interface
            lua.DoString(@"print(num)");                                       //输出2
            lua.DoString(@"print(name)");                                       //输出盘子脸
              lua.DoString(@"classList[1] = '123' print(classList[1])");        //输出123

            //lua.DoFile();         这个方法是执行一个Lua文件

              //从Lua中获取定义的变量值
              object[] values = lua.DoString("return num,name");
            double num = (double)lua["num"];
            string name = (string)lua["name"];
            LuaTable table = (LuaTable)lua["classList"];


            Console.WriteLine("num值: " + num);          //输出 2
            Console.WriteLine("name值: " + name);        //输出 盘子脸
              Console.WriteLine("table值: " + table[1]);   //输出 123



            Console.ReadLine();
        }
    }
}

若是你敲完代码发现程序没法运行,混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其余信息的状况下,没法在 4.0 运行时中加载该程序集。解决方案:http://www.cnblogs.com/plateFace/p/4775257.htmlthis

 

2、方法注册到Lua,并使用Lua调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Lua lua = new Lua();
            Program obj = new Program();

            //注册到Lua方法名能够不跟C#中的同样, 注册普通方法
              lua.RegisterFunction("WriterMyName", obj, obj.GetType().GetMethod("NormalMethod"));
            lua.DoString("WriterMyName()");

            //注册静态方法,obj的位置填写null,
            lua.RegisterFunction("StaticWriterMyName", null, typeof(Program).GetMethod("StaticMethod"));
            lua.DoString("StaticWriterMyName()");

            Console.ReadLine();
        }

        public void NormalMethod() 
        {
            Console.WriteLine("我是盘子脸");
        }

        public static void StaticMethod()
        {
            Console.WriteLine("我是静态的盘子脸");
        }

    }
}

 

3、Lua中使用C#的类和结构

下面在Lua代码中使用一下函数就能够实现Lua调用C#啦lua

  • luanet.load_assembly函数:加载CLR程序集;
  • luanet.import_type函数:加载程序集中的类型;
  • luanet.get_constructor_bysig函数:显示获取某个特定的构造函数;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Lua lua = new Lua();
            lua.DoFile("C:\\Lua\\MyLua.lua");   //调用Lua文件执行,Lua里面在调用C#的类和方法

            Console.ReadLine();
        }
    }

    //定义一个本身的的类
    public class MyLife
    {
        public string myDog;
        public MyLife() { }
        public MyLife(string myDog)
        {
            this.myDog = myDog;
        }
        public void MyFace()
        {
            Console.WriteLine("my face is red");
        }
        public void MyDogName()
        {
            Console.WriteLine("Dog name is " + myDog);
        }
    }
}

Lua中的代码:spa

print("开始运行interface啦")
luanet.load_assembly("System")                --加载当前dll
Int32 = luanet.import_type("System.Int32")     --引入类型,准备使用C#的System.Int32类
num = Int32.Parse("123")                    --使用类型
print(Int32)                                --输出类型
print(num)                                    --输出变量的值

luanet.load_assembly("ConsoleApplication4")
MyLife = luanet.import_type("ConsoleApplication4.MyLife")
life = MyLife()            --建立类
life:MyFace()

life2 = MyLife("哈皮狗")            --使用有参构造建立类
life2:MyDogName()

 

 

//今天就先写到这里O(∩_∩)O~.net

相关文章
相关标签/搜索