C#调用脚本语言(一)-- IronLua基本语法
IronLua源代码下载(SVN):http://luainterface.googlecode.com/svn/trunk/
编译:在编译时,可能会报错,因为缺少APP.Config文件,将项目中所有APP.Config删除再次编译就可以。
引用:在自己项目中引用:lua51.dll,LuaInterface.dll后可以进行后续开发。
命名空间:LuaInterface
常用方法:
C#:
注册Lua中可调用方法:
luaVM.RegisterFunction(Lua调用方法名, 类, 类.GetMethod(C#方法名)); 注:C#不要使用方法级泛型,即 void Fun<T>(string str);,如果使用,系统自动判定T为第一个参数的类型。
加载Lua代码
luaVM.DoString(Lua代码);
luaVM.DoFile(Lua文件绝对路径);
调用Lua方法
luaVM.GetFunction(Lua方法).Call(参数); 注:此处参数不要传递dynamic类型的类,否则Lua中无法获取属性值
Lua:
调用C#方法:
Say(“Ping”)
1 class ClassTestLua 2 { 3 public void Start() 4 { 5 Lua luaVM = new Lua(); 6 7 luaVM.RegisterFunction("Sleep", this, this.GetType().GetMethod("LuaSleep")); 8 luaVM.RegisterFunction("Sleep2", this, this.GetType().GetMethod("LuaSleep2")); 9 10 //载入AI文件 11 //luaVM.DoFile(System.AppDomain.CurrentDomain.BaseDirectory + _petPath + "//ai.lua"); 12 luaVM.DoString("function GetFunction(c) Sleep(c.a) end"); 13 luaVM.DoString("function GetFunction2(c) Sleep2(c.a) end"); 14 15 A<int> C = new A<int>(); 16 C.a = 10; 17 18 luaVM.GetFunction("GetFunction").Call(C);//调用lua中的GetFunction方法 19 20 try 21 { 22 23 luaVM.GetFunction("NoGetFunction").Call(C); 24 } 25 catch (Exception) 26 { 27 28 Console.WriteLine("No function"); 29 } 30 luaVM.GetFunction("GetFunction2").Call(C);//调用lua中的GetFunction方法 31 } 32 33 public void LuaSleep(int str) 34 { 35 Console.WriteLine(str); 36 } 37 public void LuaSleep2<T>(int str) 38 { 39 Console.WriteLine(str); 40 } 41 } 42 43 public class A<T> 44 { 45 public T a; 46 }