一、利用LuaInterface调用lua代码
1、下载luainterface,这里用的luainterface-1.5.3版本。
2、添加 LuaInterface.dll的引用。
3、利用解释器进行调用
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua["num"] = 34;
Console.WriteLine(lua["num"]);
Console.ReadLine();
}
}
二、lua.Dostring执行
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua.DoString("str = 'a lua string'");
lua.DoString("num = 2");
object[] values = lua.DoString("return num,str");
foreach(object obj in values)
Console.WriteLine(obj);
Console.ReadLine();
}
}
三、lua.DoFile执行
c#代码
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua.DoFile("mylua.lua");
Console.ReadLine();
}
}
lua代码,PS:要使用ANSI编码保存
num = 2;
str = "lua string"
print(num,str)
四、将C#普通方法注册到Lua
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
Program p = new Program();
lua.RegisterFunction("CLRMethod", p, p.GetType().GetMethod("CLRMethod"));
lua.DoString("CLRMethod()");
Console.ReadLine();
}
public void CLRMethod()
{
Console.WriteLine("CLRMethod is Run");
}
}
五、将C#静态方法注册到Lua
using System;
using LuaInterface;
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua.RegisterFunction("CLRMethod", null, typeof(Program).GetMethod("CLRMethod"));
lua.DoString("CLRMethod()");
Console.ReadLine();
}
public static void CLRMethod()
{
Console.WriteLine("Static CLRMethod is Run");
}
}
六、Lua调用C#方法
1、将luanet.dll 放入Debug目录下
require "luanet"
luanet.load_assembly("System");
Int32 = luanet.import_type("System.Int32");
num = Int32.Parse("3425")
print(num)
print(Int32)
2、实例II,将程序集名称与命名空间改成testluainterface
using LuaInterface;
namespace testluainterface
{
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua.DoFile("mylua.lua");
Console.ReadLine();
}
public string name = "name of program";
public void TestMethod()
{
Console.WriteLine("TestMethod is Run");
}
}
}
require "luanet"
luanet.load_assembly("testluainterface")
Program = luanet.import_type("testluainterface.Program")
program1 = Program()
print(program1.name)
program1:TestMethod()
七、Lua调用C#特殊方法(out ref)
1、当函数中有out或ref参数时,out参数和ref参数和函数的返回值一起返回,并且调用的时候,out参数不需要传入
out和ref会作为返回值和c#方法组成一个table一起返回,先返回方法返回值,再返回out或ref
using System;
using LuaInterface;
namespace testluainterface
{
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();//创建LUA解释器
lua.DoFile("mylua.lua");
Console.ReadLine();
}
public void TestOut(string text, out string msg)
{
Console.WriteLine(text);
msg = "out";
}
public void TestRef(string text, ref string msg)
{
Console.WriteLine(text);
msg = "ref";
}
}
}
require "luanet"
luanet.load_assembly("testluainterface")
Program = luanet.import_type("testluainterface.Program")
program1 = Program()
print(program1:TestOut("Lua out"))
print(program1:TestRef("Lua ref","C# ref"))