首页 文章

将lua表从C传递给.Lua脚本

提问于
浏览
2

我花了6个小时试图解决这个问题!我无处可去:s

我希望能够在c文件中创建一个lua表,然后将其传递给lua脚本文件,该文件具有以下lua函数:

function MTable (t) 
local n=#t
    for i=1,n do 
      print(t[i]) 
    end
end

我动态创建了一个包含两个字符串的一维数组:

lua_newtable(L);
 lua_pushstring(L,"10.10.1.1");
 lua_pushstring(L,"10.10.1.2");
 lua_rawseti(L,-3,2);
 lua_rawseti(L,-2,1);

所以现在我把 table 放在堆栈顶部 . 我通过写这个来验证它:if(lua_istable(L,lua_gettop(L)))`返回1,这意味着它是一个表 .

然后我这样做了:

lua_getglobal(L, "MTable");    // push the lua function onto the stack

uint32_t   result = lua_pcall(L, 1, 0, 0);  //argument 1 is for the table
 if (result) {
 printf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
         exit(1);
}

所以我收到了这个错误: Failed to run script: attempt to call a table value

请注意,该文件还有其他几个我从c成功调用的函数 .

有人可以帮我解决这个错误吗?这可能是LUA的错误吗? cz我非常正确地按照步骤...我猜!

1 回答

  • 4

    该函数必须首先在堆栈上,在args之前 .

    你可以:

    • 在生成表之前推送函数调用堆栈,例如:
    lua_getglobal(L, "MTable");
    ...generate table on stack...
    int result = lua_pcall(L, 1, 0, 0);
    
    • 按照你现在的顺序执行,然后在执行pcall之前只需交换arg和函数:
    ...generate table on stack...
    lua_getglobal(L, "MTable");
    lua_insert (L, -2);   // swap table and function into correct order for pcall
    int result = lua_pcall(L, 1, 0, 0);
    

相关问题