博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua Interface基础使用
阅读量:4608 次
发布时间:2019-06-09

本文共 4227 字,大约阅读时间需要 14 分钟。

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

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

你需要安装以下组件

LuaForWindows下载地址:   直接安装即可

LuaInterface下载地址:    下载之后把Lua51.dll, LuaInterface.dll 加入C#项目中

 

一、练习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 运行时中加载该程序集。解决方案:

 

二、方法注册到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("我是静态的盘子脸");        }    }}

 

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

下面在Lua代码中使用一下函数就可以实现Lua调用C#啦

  • 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中的代码:

print("开始运行interface啦")luanet.load_assembly("System")                --加载当前dllInt32 = 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~

转载于:https://www.cnblogs.com/plateFace/p/4790279.html

你可能感兴趣的文章
20145325张梓靖 实验三 "敏捷开发与XP实践"
查看>>
JavaScript面试题
查看>>
[转帖]架构师眼中的高并发架构
查看>>
ios的一些开源资源
查看>>
HTTP 错误 500.21 - Internal Server Error 解决方案
查看>>
Bucks sign Sanders to $44 million extension
查看>>
【PHP】Windows下配置用mail()发送邮件
查看>>
Nhibernate和EF的区别
查看>>
基于java spring框架开发部标1078视频监控平台精华文章索引
查看>>
人类简史
查看>>
java 设计模式学习
查看>>
【Python使用】使用pip安装卸载Python包(含离线安装Python包)未完成???
查看>>
一语道破项目管理知识体系五大过程组
查看>>
C# 备份、还原、拷贝远程文件夹
查看>>
在windows环境下运行compass文件出现的错误提示解决方案
查看>>
CSS常用样式--font
查看>>
恩如氏--蜗牛精华补水蚕丝面膜
查看>>
大工具-收藏
查看>>
codevs3027 线段覆盖 2
查看>>
markdown
查看>>