使用 Lua 和 C++ 管理堆栈

我需要将一个 lua 脚本传递给一个单一的字符串(文件路径),并返回 0 到多个字符串。

int error = 0;
lua_State *L = lua_open();
luaL_openlibs(L);

std::vector<string> list_strings;

用于将字符串推入堆栈,然后加载和调用源文件

if ((error = luaL_loadfile(L, "src/test.lua")) == 0)
{
    lua_pushstring(L, path.c_str());

    if ((error = lua_pcall(L, 1, LUA_MULTRET, 0)) == 0)
    {
        lua_gettable(L, LUA_GLOBALSINDEX);
        lua_pcall(L,1,1,0);

        if (lua_gettop(L) == 1 && lua_istable(L,1))
        {
            int len = lua_objlen(L,1);
            for (int i=1;i =< len; i++)
            {
                lua_pushinteger(L,i);
                lua_gettable(L,1);

                const char *s = lua_tostring(L,-1);
                if (s)
                {
                    list_strings.push_back(s);
                }

                lua_pop(L,1);
            }
        }
    }
}

目前,我只是从示例中复制了代码,所以我不太确定我在做什么...我想将路径推入堆栈,调用一个 lua 函数,该函数会将该值从堆栈中取出,并解析与该路径相关联的文件。

解析后,它应返回包含其中的字符串的表(您可以将其视为搜索特定字符串的函数,我想)

编辑:更清楚

任何建议/资源吗? 这里有类似的问题吗?或者有任何有用的资源?

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

点赞
stackoverflow用户107090
stackoverflow用户107090

Lua 中没有堆栈。在 C 中推入的值作为调用的参数发送给 Lua。如果您执行的是整个脚本而不是特定函数,则可以使用 ... 作为参数进行传递。因此,您可以使用 local myarg = ... 来获取第一个参数。或者使用 local arg ={...} 将它们全部存入表中。

2011-06-28 19:10:35