Lua与.Net互调

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格式


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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值