如何写c代码读取lua表地址

xxls0lw8  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个c函数,其中我使用lua_register从lua表中获取数据到c代码,但我有疑问。
我怎样才能读取一个lua表指针,来创建一个c代码来读取那个表
我有以下代码。

table.lua

MyTable = {
   ["coreal_1-1"] = {
        enable = true,
        special = {
          start = true,
          time = 60,
        },
        speed = 1.5,
        size = 2.5,
    },
    ["capt_2-3"] = {
        enable = true,
        special = {
          start = true,
          time = 30,
        },
        speed = 1.8,
        size = 2.1,
        index = 1.1,
    }
}

function main()
    for k, v in pairs(MyTable) do
        result, msg = table_read(k, v.enable, v.special, v.speed, v.size, v.index)
        if (not result) then
            return false, msg
        end
    end
    return true, "success"
end

C代码:

int table_read(lua_State *L) {
    int id = 0, time = 0;
    bool enable = false, start = false;
    
    id = GetID(luaL_checkstring(L, 1));
    enable = lua_toboolean(L, 2);
    
    if (lua_getfield(L, 2, luaL_checkstring(L, 2))) {
            start = lua_toboolean(L, 3);
            time = lua_tointeger(L, 3);
    }
    lua_pop(L, 1);
    ...
    return 1;
}

void main(void) {
    lua_State *L;
    L = luaL_newstate();
    luaL_openlibs(L);
    
    lua_register(L, "table_read", table_read);
    
    if (luaL_dofile(L, "table.lua"))
        return;

    lua_getglobal(L, "main");

    if (LUA_OK != lua_pcall(L, 0, 0, 0))
        return;

}

问题发生在v.special中,传递了表指针
现在的问题是,我如何使用它生成的地址创建这个表的阅读?

8ljdwjyq

8ljdwjyq1#

索引3中的v.special。您应该使用lua_getfield来获取此表,如下所示:

lua_getfield(L, 3, "start");
    int start = lua_tonumber(L, -1);
    lua_getfield(L, 3, "time");
    int time = lua_tonumber(L, -1);

看这里的文档。

相关问题