Lua与.Net互调

来源:互联网 发布:淘宝号注册 编辑:程序博客网 时间:2024/05/11 20:00

Lua是一种很好的扩展性语言,由C语言编写,Lua解释器被设计成一个很容易嵌入到宿主程序的库

我们可以使用LuaForWindows或则LuaInterface得到LuaInterfaxe,dll文件

在这里我提供LuaInterface包,方便大家下载点击打开链接

【开发环境的配置】

VS新建一个C#控制台应用程序


解压下载下来的luainterface资源包,根据如下图的路径找到三个.dll文件


将这三个.dll文件添加到应用


右键引用,选择‘添加文件’


点击浏览,找到工程文件目录,选中这三个.dll文件


只需选择LuaInterface.dll,点击确定


【C#中调用Lua代码】

在配置好了环境后,开始用C#调用Lua代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using LuaInterface;namespace MyLuaInterfaceObj{class Program{static void Main(string[] args){//创建Lua解释器Lua lua = new Lua();/*定义变量lua["num"] = 2;lua["name"] = "LiuJunLiang";Console.WriteLine(lua["num"]);Console.WriteLine(lua["name"]);*//*获得返回值lua.DoString("number=2");lua.DoString("name='LiuJunLiang'");Object[] obj = lua.DoString("return number,name");foreach (Object m_obj in obj){Console.WriteLine(m_obj);}*//*执行lua文件lua.DoFile("text.lua");*//*将一个C#普通函数注册到lua中*/Program program = new Program();lua.RegisterFunction("MyLocalMethod",program,program.GetType().GetMethod("MyLocalMethod"));lua.DoString("MyLocalMethod()");//执行lua里的函数/*将一个C#静态函数注册到lua中*/lua.RegisterFunction("MyStaticMethod",null,typeof(Program).GetMethod("MyStaticMethod"));lua.DoString("MyStaticMethod()");Console.ReadKey();}public void MyLocalMethod(){Console.WriteLine("HelloWord");}public static void MyStaticMethod(){Console.WriteLine("HelloWord2");}}}


【在Lua中访问C#的属性和方法】

require "luanet"--获取程序集luanet.load_assembly("System")--获取类,会自动匹配最合适的构造方法IntValue=luanet.import_type("System.Int32")--调用该类中静态方法num=IntValue.Parse("54321");print(num);--获取自己项目的程序集luanet.load_assembly("MyLuaInterfaceObj");--Program类也是自己建的Program=luanet.import_type("MyLuaInterfaceObj.Program");--调用该类中的OutMethod方法--由于第二个参数是out,故调用时不需要加入第二个参数out_a,out_b =Program:OutMethod(1)print(out_a,out_b)--out_a=0,out_b=2--调用该类中的RefMethod方法--ref需要加入参数out_a,out_b =Program:OutMethod(1,2)print(out_a,out_b)--out_a=0,out_b=2


//Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using LuaInterface;namespace MyLuaInterfaceObj{class Program{static void Main(string[] args){//创建Lua解释器Lua lua = new Lua();//执行lua代码lua.DoString("LuaCallCSharp.lua");Console.ReadKey();}public void MyLocalMethod(){Console.WriteLine("HelloWord");}public static void MyStaticMethod(){Console.WriteLine("HelloWord2");}public int OutMethod(int a,out int b){b = a + a;a = 0;return a;}public int RefMethod(int a,ref int b){b = a + a;a = 0;return a;}}}


注意:

一.如果项目编译中发现说无法找到DLL("lua51.dll")或者("luanet.dll")

此时你需要lua51.dll和luanet.dll文件放在Debug生成目录下

二.如果编译报如下图错误,则将.lua文件编码格式改为ANSI格式


如果有什么问题可以参考我的项目文件点击打开链接

2 0
原创粉丝点击