vJine.Lua是Lua語言的C#封裝庫,可實現通過C#直接運行Lua腳本并與Lua腳本交互的功能。
MPL2.0
nuget:(https://www.nuget.org/packages?q=vjine)API文檔:(http://git.oschina.net/vjine/vJine.Lua/attach_files)
Lua官網:(http://www.lua.org)Lua中國開發者:(http://www.luaer.cn)babelua(基于Visual Studio擴展的Lua編輯器):(https://babelua.codeplex.com/)
QQ群:115051701
1)vJine.Lua采用C++/CIL封裝自Lua,當前Lua版本為(Lua 5.3.0)2)暫不支持方法重載,注入時同名方法將被覆蓋。
//引用命名空間
using vJine.Lua;
//獲取Lua版本
string V = LuaContext.Version;
//實例化LuaContext
LuaContext luaContext = new LuaContext();
string vars_name = "vJine.Lua.Vars.bool";
//設置與讀取堆棧變量
bool v_bool = true;luaContext.set(true);luaContext.get(out v_bool);Debug.Assert(v_bool == true);luaContext.set(false);luaContext.get(out v_bool);Debug.Assert(v_bool == false);
//設置與讀取全局變量
luaContext.set(vars_name, true);luaContext.get(vars_name, out v_bool);Debug.Assert(v_bool == true);luaContext.set(vars_name, false);luaContext.get(vars_name, out v_bool);Debug.Assert(v_bool == false);
//注冊:匿名方法
luaContext.reg("vJine.Lua.funcs.anony", new Action<MyStatus>((MyStatus E) => { string msg = string.Format("result[anonymous]:{0}", E);}));
//注冊:靜態方法
luaContext.reg("vJine.Lua.funcs.M", new Action<MyStatus>(MyClass.M));
//注冊:實例方法
MyClass xq = new MyClass();luaContext.reg("vJine.Lua.funcs.m", new Action<MyStatus>(x1.m));
//注冊類:默認名稱
luaContext.reg<MyClass>();
//注冊類:自定義名稱
luaContext.reg<MyClass>("vJine.Lua.YourClass");
//注入腳本:
object[] R = luaContext.inject( "function callback(my_arg) return my_arg .. ' on_the_fly' end return true, 1.234, callback('vJine.Lua')");
//調用腳本
object[] Obj = luaContext.exec("callback", "vJine.Lua");
//加載腳本:
R = luaContext.load("d:/vJine.Lua/start.lua");
//打印堆棧變量:
luaContext.PRint_vars();
//打印全局變量:
luaContext.print_var("vJine.Lua.UT.MyClass");
//類定義:
public class MyClass { public MyClass My { get; set; } public bool B { get; set; } public bool? b { get; set; } public byte[] B_ { get; set; } public double D { get; set; } public double d { get; set; } public Guid G { get; set; } public Guid? g { get; set; } public Guid[] G_ { get; set; } public string S { get; set; } public string s { get; set; } public string[] s_ { get; set; } public DateTime DT { get; set; } public DateTime? dt { get; set; } public DateTime[] DT_ { get; set; } public MyStatus E { get; set; } public MyStatus? e { get; set; } public MyStatus[] E_ { get; set; } publicstaticvoidM(MyStatusE){ string msg = string.Format("result[anonymous]:{0}", E); } publicvoidm(MyStatusE){ string msg = string.Format("result[anonymous]:{0}", E); } publicstaticstringSM(inta,stringb){ return string.Format("SM:Result:a,{0};b,{1}", a, b); } publicstringIM(inta,stringb){ return string.Format("IM:Result:a,{0};b,{1}", a, b); } publicstringshow_properties(){ return string.Format("Properties:b,{0};d,{1};s,{2}", this.B, this.D, this.s); }}
新聞熱點
疑難解答