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此时才有意义|