传递一个LUA表从C ++来.Lua脚本(passing a lua table from C++

2019-09-17 09:04发布

我花了近6小时试图解决这个问题! 我coulnt取得任何进展:■

我希望能够在C创建一个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);

所以现在我对堆栈的顶部的表中。 我已经通过此书面方式验证它:如果(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);
}

所以我得到的错误: 无法运行脚本:尝试调用表值

请注意,该文件中有我我成功地从C ++调用其他几个功能。

可以请人帮我解决这个问题? 这可以从LUA错误? CZ我非常正确遵循的步骤......我猜!

Answer 1:

该功能必须在堆栈上,在ARGS之前。

您可以:

  1. 推功能生成所述表,例如之前在堆栈上调用:

     lua_getglobal(L, "MTable"); ...generate table on stack... int result = lua_pcall(L, 1, 0, 0); 
  2. 做你现在要做的顺序,然后只是交换ARG和功能之前做PCALL:

     ...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); 


文章来源: passing a lua table from C++ to .Lua script
标签: c++ lua luabind