在C++中从表调用lua函数
Calling a lua function from table.subtable in C++
im试图从C++中调用一个lua函数,该函数位于全局表的子表中。我使用的是源代码编译的lua 5.2.*版本。
Lua函数
function globaltable.subtable.hello()
-- do stuff here
end
C++代码
lua_getglobal(L, "globaltable");
lua_getfield(L, -1, "subtable");
lua_getfield(L, -1, "hello");
if(!lua_isfunction(L,-1)) return;
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_call(L, 2, 0);
然而,我无法调用它,我总是得到一个错误
PANIC:调用Lua API时出现未受保护的错误(试图对零值进行索引)
第3行:lua_etfield(L,-1,"你好")
我缺少什么
附带问题:我也想知道如何调用比这更深层次的函数,比如globaltable.subtable.subbtable.hello()等等。
谢谢!
这就是我用来创建全局表的东西:
int lib_id;
lua_createtable(L, 0, 0);
lib_id = lua_gettop(L);
luaL_newmetatable(L, "globaltable");
lua_setmetatable(L, lib_id);
lua_setglobal(L, "globaltable");
如何创建globaltable.subtable?
function
是Lua中的一个关键字,我猜你是如何编译代码的:
-- test.lua
globaltable = { subtable = {} }
function globaltable.subtable.function()
end
运行时:
$ lua test.lua
lua: test.lua:2: '<name>' expected near 'function'
也许您更改了这个在线演示的标识符,但请检查第2行的"subtable"
是否确实存在于globaltable
中,因为在第3行,堆栈的顶部已经是nil
。
更新:
要创建多级表,可以使用以下方法:
lua_createtable(L,0,0); // the globaltable
lua_createtable(L,0,0); // the subtable
lua_pushcfunction(L, somefunction);
lua_setfield(L, -2, "somefunction"); // set subtable.somefunction
lua_setfield(L, -2, "subtable"); // set globaltable.subtable
lua_newtable(L);
luaL_newmetatable(L, "globaltable");
lua_newtable(L); //Create table
lua_setfield(L, -2, "subtable"); //Set table as field of "globaltable"
lua_setglobal(L, "globaltable");
这就是我想要的。
相关文章:
- 调用 lua 函数的地址为 C/C++?
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- 使用二进制参数调用LUA方法
- 从c++调用lua函数时,如何使表和变量值保持不变
- C++ - 调用 Lua 函数始终返回 0
- 从C++调用 lua 函数时"Error in error handling"
- Lua errorPANIC:调用 Lua API 时出现不受保护的错误(尝试调用 nil 值)
- 从C++中调用Lua函数
- 在 c++ 中调用 lua 函数(带有 require 'nn')
- 在C++中从表调用lua函数
- 在线程中从C++调用Lua
- 从缺少参数C++调用 Lua 函数
- tolua++从C++代码中调用Lua函数
- LuaPlus:如何从多线程C++中调用Lua函数
- 从不同的线程调用Lua函数(在C++中嵌入Lua)可以吗
- 从c++中调用Lua表函数w/ self in函数
- 从string_t调用Lua函数
- 当Lua被绑定到类中时,使用LuaBind在类中调用Lua函数
- 使用自定义数据作为函数参数调用lua回调
- 调用Lua:使用setField来指向自身