工程環境搭建:
- 下載luainterface-1.5.3.zip文件,使用到的dll為Built目錄下的LuaInterface.dll、lua51.dll、luanet.dll
- LuaInterface.dll為C#的dll,需要引用到工程中
- lua51.dll、luanet.dll為C++的dll,需要拷貝到工程的輸出目錄下(Debug)
- C#調用Lua需要使用:LuaInterface.dll和lua51.dll
- Lua調用C#的類需要使用:LuaInterface.dll和luanet.dll,luanet.dll拷貝到工程輸出目錄,lua腳本中就不需要使用package.cpath和require了
很多帖子並沒有講清楚導致報錯:
“LuaInterface.LuaException”類型的未經處理的異常在 LuaInterface.dll 中發生 其他信息: error loading module 'luanet' from file '.\luanet.dll'
也就是雲哥我這么給力
1 namespace TestLua 2 { 3 public class Program 4 { 5 6 public string name = "zhaozongyun"; 7 static void Main(string[] args) 8 { 9 //創建lua解釋器(也叫Lua虛擬機) 10 Lua lua1 = new Lua(); 11 12 Console.WriteLine("--->> C#中執行Lua字符串"); 13 14 //C#中執行Lua字符串 15 lua1.DoString("num = 111"); 16 lua1.DoString("str = 'zhaozongyun'"); 17 Object[] values = lua1.DoString("return num, str"); 18 foreach (Object obj in values) 19 { 20 Console.WriteLine(obj); 21 } 22 23 Console.WriteLine("--->> C#注冊的普通方法到Lua中,並執行Lua字符串"); 24 25 //C#注冊的普通方法到lua中,並執行Lua字符串 26 Program p = new Program(); 27 Lua lua2 = new Lua(); 28 lua2.RegisterFunction("LuaMethod1", p, p.GetType().GetMethod("CLRMethod")); 29 lua2.DoString("LuaMethod1()"); 30 31 Console.WriteLine("--->> C#注冊靜態方法到Lua中,並執行Lua字符串"); 32 33 //C#注冊靜態方法到Lua中,並執行Lua字符串 34 lua2.RegisterFunction("LuaMethod2", null, typeof(Program).GetMethod("StaticMethod")); 35 lua2.DoString("LuaMethod2()"); 36 37 Console.WriteLine("--->> C#中執行Lua腳本"); 38 39 //C#中執行lua腳本文件 40 Lua lua3 = new Lua(); 41 lua3.DoFile("myLua1.lua"); 42 43 Console.WriteLine("--->>C#執行Lua腳本,Lua腳本中加載C#類,並訪問C#"); 44 45 //C#執行Lua文件,Lua文件加載C#類,並調用C# 46 Lua lua4 = new Lua(); 47 lua4.DoFile("myLua2.lua"); 48 lua4.DoFile("myLua3.lua"); 49 50 Console.ReadKey(); 51 } 52 53 public void CLRMethod() 54 { 55 Console.WriteLine("CLRMethod"); 56 } 57 58 public static void StaticMethod() 59 { 60 Console.WriteLine("StaticMethod"); 61 } 62 } 63 }
Lua1腳本
1 num = 222 2 string = "hello world" 3 print(string)
Lua2腳本
1 --加載CLR的類型、實例化CLR對象 2 luanet.load_assembly("System") 3 Int32 = luanet.import_type("System.Int32") 4 print(Int32)
Lua3腳本
1 --require "luanet" 2 --加載CLR的類型 3 luanet.load_assembly("TestLua") 4 Program = luanet.import_type("TestLua.Program") 5 --實例化CLR對象 6 program = Program() 7 print(program.name) 8 program:CLRMethod()