在lua中,lua堆栈就是一个struct,堆栈索引的方式是正数也可以是负数,区别是:正数索引1永远表示栈低,负数索引-1永远表示栈顶。
栈顶
4 ------------- -1
3 ------------- -2
2 ------------- -3
1 ------------- -4
栈底
lua_gettop (lua_State *L) 返回栈顶索引(即栈长度)
lua_settop(lua_State * L, int index) 将栈顶设置为一个指定的位置
修改栈中元素的数量。如果值比原栈顶高,则高的部分nil补足,如果值比原栈低,则原栈高出的部分舍弃,所以可以用lua_settop(0)来清空栈。
luaL_newstate 内存分配
接受两个参数,一个类型为lua_Alloc,另一个是void*,lua_Alloc 定义一个lua_Alloc的函数指针类型,其返回值为void
luaL_loadfile 加载一个lua文件
lua_pcall 运行编译好的程序块
lua_getglobal 将全局变量值压入栈中
lua_to* 将字段的值从栈中读取
- lua_tonumber
- lua_toboolean
- lua_tolstring
- lua_tointeger
- lua_tocfunction
lua_push* 将一个需要设置的值放到栈中
- lua_pushnumber
- lua_pushboolean
- lua_pushlstring
- lua_pushinteger
- lua_pushcfunction
lua_getfield 读取table中字段的值,并将值压入栈中
-- 读取全局的数据到栈中
lua_getglobal(L, "background");
--读取table中字段的值,将值压入栈中
lua_getfield(L, -1, "r");
lua_setfield 将某个值设置到table中
--将需要设置的值设置到栈中
lua_pushnumber(L, 0.55);
--将这个值设置到table中
lua_setfield(L, -2, "r");
lua_pushcfunction(L, functionName) 将函数放入栈中
示例
--hello.lua
str = "i am so cool"
table = {name = "zhang", id = 1}
function add(a,b)
return a+b
end
//test.cpp
void main()
{
//1.创建lua状态
lua_State *L = luaL_newstate();
if(L == NULL)
{
return;
}
//2.加载lua文件
int bRet = luaL_loadfile(L,"hello.lua");
//3.运行lua文件
bRet = lua_pcall(L,0,0,0);
//4.读取变量
lua_getglobal(L,"str");
//5.读取table
lua_getglobal(L,"table");
lua_getfield(L,-1,"name");
//6.读取函数
lua.getglobal(L,"add");//获取函数,压入栈中
lua.pushnumber(L,10);//压入第一个参数
lua.pushnumber(L,20);//压入第二个参数
int iRet = lua_pcall(L,2,1,0);//调用函数,调用完以后,会将返回值压入栈中,2表示参数个数,1表示返回值个数
//至此,栈中情况
// 栈顶
// 索引 类型 值
//----------------------------------------
// 4 int: 30
// 3 string: zhang
// 2 table: table
// 1 string: i am so cool
//-----------------------------------------
// 栈底
}
参考网址:
版权声明:本文为优快云博主「俊哥兜里有糖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/u010782644/article/details/79291958