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格式
如果有什么问题可以参考我的项目文件点击打开链接