ulua底层实现
unity - > C # - > C++ -> lua
要理解Lua和C++交互,首先要理解Lua堆栈。
简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。
在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。
luaL_newstate返回一个指向堆栈的指针
1 int lua_gettop (lua_State *L); //返回栈顶索引(即栈长度)
2 void lua_settop (lua_State *L, int idx); //
3 void lua_pushvalue (lua_State *L, int idx);//将idx索引上的值的副本压入栈顶
4 void lua_remove (lua_State *L, int idx); //移除idx索引上的值
5 void lua_insert (lua_State *L, int idx); //弹出栈顶元素,并插入索引idx位置
6 void lua_replace (lua_State *L, int idx); //弹出栈顶元素,并替换索引idx位置的值
xlua 需要重新编译第三方
public const bool UsePbc = true; //PBC
public const bool UseLpeg = true; //LPEG
public const bool UsePbLua = true; //Protobuff-lua-gen
public const bool UseCJson = true; //CJson
public const bool UseSproto = true; //Sproto
public const bool AutoWrapMode = true; //自动Wrap模式
==
unity - > C # - > C++ -> lua
要理解Lua和C++交互,首先要理解Lua堆栈。
简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。
在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。
luaL_newstate返回一个指向堆栈的指针
1 int lua_gettop (lua_State *L); //返回栈顶索引(即栈长度)
2 void lua_settop (lua_State *L, int idx); //
3 void lua_pushvalue (lua_State *L, int idx);//将idx索引上的值的副本压入栈顶
4 void lua_remove (lua_State *L, int idx); //移除idx索引上的值
5 void lua_insert (lua_State *L, int idx); //弹出栈顶元素,并插入索引idx位置
6 void lua_replace (lua_State *L, int idx); //弹出栈顶元素,并替换索引idx位置的值
xlua 需要重新编译第三方
public const bool UsePbc = true; //PBC
public const bool UseLpeg = true; //LPEG
public const bool UsePbLua = true; //Protobuff-lua-gen
public const bool UseCJson = true; //CJson
public const bool UseSproto = true; //Sproto
public const bool AutoWrapMode = true; //自动Wrap模式
==