Lua Interface基础使用
2024-08-25 23:07:41
Lua是一种可爱的脚本语言,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中(多数指热更新),从而为应用程序提供灵活的扩展和定制功能.
LuaInterface Lua语言之间是一个库集成和微软。网络平台的公共语言运行时(CLR)。Lua脚本可以使用它来实例化CLR对象,访问属性、调用方法,甚至与Lua函数处理事件。(我们使用C#调用Lua, 当然你可以用C++)
你需要安装以下组件
LuaForWindows下载地址:http://luaforge.net/projects/luaforwindows/ 直接安装即可
LuaInterface下载地址:http://luaforge.net/projects/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 运行时中加载该程序集。解决方案:http://www.cnblogs.com/plateFace/p/4775257.html
二、方法注册到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") --加载当前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~
最新文章
- Transaction (Process ID xxx) was deadlocked on lock
- 【Linux】lsof 命令,记一次端口占用查询
- css中的一些概念
- chmod 和 chown 的用法
- C#中TreeView与数据库绑定
- OPENGL 地形
- Discuz!源代码阅读笔记之common.inc.php文件【1】
- 福建省队集训被虐记——DAY3
- 负载均衡集群之LVS配置命令
- Visual Studio 2015 Update 3 RC 候选预览版粗来了
- github jekyll site不再使用Maruku由于Markdown翻译员,但kramdown
- 机器学习( Machine Learning)的定义
- HDU 1525 Euclid's Game
- struts2修改文件上传的大小
- WPF依赖属性2
- 【Python全栈-后端开发】Django进阶2-Form表单
- [JS] ECMAScript 6 - Array : compare with c#
- AtCoder Beginner Contest 070|Elena|8.12|#471
- from…import 语句
- Golang AES加密