UniLua纯 C# 实现的 Lua 5.2
UniLua 是一个纯 C# 实现的 Lua 5.2,侧重于兼容性。
最朴素的从 C# 调用 lua 的一个全局函数的写法:
Lua.GetGlobal( "foo" ); // 加载 lua 中定义的一个名叫 foo 的全局函数到堆栈 Debug.Assert( Lua.IsFunction(-1) ); // 确保加载成功了, 此时栈顶是函数 foo Lua.PushString( "test" ); // 将第一个参数(字符串 "test")入栈 Lua.PushInteger( 42 ); //将第二个参数(整数 42)入栈 Lua.Call(2, 0); // 调用函数 foo, 指明有2个参数,没有返回值 // 上面的代码相当于 lua 里一个这样的调用 foo("test", 42)
稍微复杂一点的例子可以参考实例程序里的一些简单写法: 参考这个文件 Assets/Behaviour/LuaScriptController.cs:
示例代码:
// 创建 Lua 虚拟机 var Lua = LuaAPI.NewState(); // 加载基本库 Lua.L_OpenLibs(); // 加载 Lua 脚本文件 var LuaScriptFile = "framework/main.lua"; var status = Lua.L_DoFile( LuaScriptFile ); // 捕获错误 if( status != ThreadStatus.LUA_OK ) { throw new Exception( Lua.ToString(-1) ); } // 确保 framework/main.lua 执行结果是一个 Lua Table if( ! Lua.IsTable(-1) ) { throw new Exception( "framework main's return value is not a table" ); } // 从 framework/main.lua 返回的 table 中读取 awake 字段指向的函数 // 并保存到 AwakeRef 中 (可以将 AwakeRef 视为这个函数的句柄) var AwakeRef = StoreMethod( "awake" ); // 不再需要 framework/main.lua 返回的 table 了,将其从栈上弹出 Lua.Pop(1); //---------------------------------------------------- // 在需要的时候可以这样调用 AwakeRef 指向的 lua 函数 CallMethod( AwakeRef ); //---------------------------------------------------- // StoreMethod 和 CallMethod 的实现 private int StoreMethod( string name ) { Lua.GetField( -1, name ); if( !Lua.IsFunction( -1 ) ) { throw new Exception( string.Format( "method {0} not found!", name ) ); } return Lua.L_Ref( LuaDef.LUA_REGISTRYINDEX ); } private void CallMethod( int funcRef ) { Lua.RawGetI( LuaDef.LUA_REGISTRYINDEX, funcRef ); var status = Lua.PCall( 0, 0, 0 ); if( status != ThreadStatus.LUA_OK ) { Debug.LogError( Lua.ToString(-1) ); } }
评论
IronLeveldb纯 C# 实现的 Leveldb
纯C#实现的Leveldb兼容.NETStandard1.3(.NET46.NETCore1.0)主要项目使用dotnet构建,但由于某些依赖关系,测试项目目前正在针对net46,只能在Windows
IronLeveldb纯 C# 实现的 Leveldb
0
The Lua Lockbox纯 Lua 编写的加密原语和协议
该项目包含一些纯 Lua 编写的加密原语和协议,包括:Digests:MD2MD4MD5RIPEMD
The Lua Lockbox纯 Lua 编写的加密原语和协议
0
The Lua Lockbox纯 Lua 编写的加密原语和协议
该项目包含一些纯Lua编写的加密原语和协议,包括:Digests:MD2MD4MD5RIPEMD128RIPEMD160SHA1SHA2-224SHA2-256MessageAuthenticatio
The Lua Lockbox纯 Lua 编写的加密原语和协议
0
Moon#C# 实现的 Lua 解释器
Moon#是一个完全用C#实现的Lua解释器,可用于.NET、Mono、Xamarin和Unity3D平台。特性:99%与Lua5.2兼容(唯一不受支持的功能是对弱表的支持)支持metalua风格的匿
Moon#C# 实现的 Lua 解释器
0