一、利用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();
- }
- }
- 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"))