c++ lua 部分调用接口
c++调用lua部分接口说明
lua内容
MyGlobalVari1 = 1024
MyGlobalVari2 = 2048
MyTable = { first = 1, second = "second" }
statckDump(lua_State* L)
显示栈L中的值
static void statckDump(lua_State* L)
{
std::cout << "\nbegin dump lua stack" << std::endl;
int i = 0;
int top = lua_gettop(L);
for (i = 1; i <= top; ++i) {
int t = lua_type(L, i);
switch (t) {
case LUA_TSTRING: {
printf("'%s' ", lua_tostring(L, i));
}
break;
case LUA_TBOOLEAN: {
printf(lua_toboolean(L, i) ? "true " : "false ");
}
break;
case LUA_TNUMBER: {
printf("%g ", lua_tonumber(L, i));
}
break;
default: {
printf("%s ", lua_typename(L, t));
}
break;
}
}
std::cout << "\nend dump lua stack" << std::endl;
}
编译
g++ target.cpp -llua -std=c++11
int lua_getglobal(lua_State* L, const char* name)
获取Lua程序中全局变量name的值并将其压入栈L中,返回值是该值的类型。
statckDump(L);
lua_getglobal(L, "MyGlobalVari2");
statckDump(L);
结果
begin dump lua stack
end dump lua stack
begin dump lua stack
2048
end dump lua stack
void lua_setglobal (lua_State *L, const char *name)
将栈L顶的值赋值给name中,并弹出栈顶。
lua_pushnumber(L, 5096);
lua_setglobal(L, "MyGlobalVari1");
statckDump(L);
lua_getglobal(L, "MyGlobalVari1");
statckDump(L);
结果
begin dump lua stack
end dump lua stack
begin dump lua stack
5096
end dump lua stack
int lua_getfield (lua_State *L, int index, const char *k)
获取栈L[index]所指的table中的key为k的值,并压入栈顶。
lua_getglobal(L, "MyTable");
statckDump(L);
lua_getfield(L, -1, "first");
statckDump(L);
结果
begin dump lua stack
table
end dump lua stack
begin dump lua stack
table 1
end dump lua stack
void lua_setfield (lua_State *L, int index, const char *k)
将栈L顶的值赋值给L[index]所指的table的key为k的值,并将栈顶弹出。
lua_pushnumber(L, 11);
lua_setfield(L, -2, "first");
lua_getfield(L, -1, "first");
statckDump(L);
结果
begin dump lua stack
table 11
end dump lua stack
void lua_sethook (lua_State *L, lua_Hook f, int mask, int count)
设置一个调试用钩子函数。lua_Hook f是钩子函数。
mask:
|值|含义|
|–|–|
|LUA_MASKCALL|在调用一个函数时候调用,钩子将于Lua进入一个新函数后,函数获取参数前被调用|
|LUA_MASKRET|钩子将于 Lua 离开函数之前的那一刻被调用|
|LUA_MASKLINE|开始执行新的一行代码时, 或是跳转到这行代码中时(即使在同一行内跳转)被调用。|
|LUA_MASKCOUNT|每执行 count 条指令后被调用, int count此时才有意义|