将C++中的Lua表传递给.Lua脚本。

我已经花了过去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);

现在该表位于堆栈的顶部。通过编写以下内容进行验证: 如果(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的错误吗?因为我非常准确地遵循了步骤... 我想!

原文链接 https://stackoverflow.com/questions/10670094

点赞
stackoverflow用户284969
stackoverflow用户284969

函数必须第一个压入堆栈,然后才是参数。

您可以采用以下两种方式之一:

  1. 在生成表之前将要调用的函数压入堆栈,例如:

    lua_getglobal(L, "MTable");
    ... 在堆栈上生成表 ...
    int result = lua_pcall(L, 1, 0, 0);
    
  2. 按照现在的顺序进行操作,然后在执行 pcall 之前只需交换参数和函数的顺序即可:

    ...在堆栈上生成表...
    lua_getglobal(L, "MTable");
    lua_insert (L, -2);   // 将表和函数交换到正确的顺序中用于 pcall
    int result = lua_pcall(L, 1, 0, 0);
    
2012-05-20 02:55:15