gpt4 book ai didi

c++ - 将 lua 表从 C++ 传递到 .Lua 脚本

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:58 27 4
gpt4 key购买 nike

我花了 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);

所以现在我的表格位于堆栈的顶部。我已经通过写这个验证了它: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);
}

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

请注意,该文件具有我从 C++ 成功调用的其他几个函数。

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

最佳答案

函数必须在堆栈中第一个,在参数之前。

您可以:

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

    lua_getglobal(L, "MTable");
    ...generate table on stack...
    int result = lua_pcall(L, 1, 0, 0);
  2. 按照您现在执行的顺序执行,然后在执行 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);

关于c++ - 将 lua 表从 C++ 传递到 .Lua 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670094/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com