从C ++中调用Lua表函数w / self in function

时间:2016-11-11 15:55:52

标签: c++ lua

我的目标是简单地从C ++调用一个表函数,该函数使用函数内部的“self”来访问该表的字段和函数。我继续在'self.name'这一行上获得可爱的'尝试称为nill值(本地自我)'。下面是我的Lua脚本。

Foo = { name = 'Foo' }

function Foo:OnUpdate()
  print('In OnUpdate in Lua')
  print(self.name)
end

下面是我的C ++代码(暂时忽略任何错误处理)。

lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "foo.lua");
lua_getglobal(L, "Foo");
lua_getfield(L, -1, "OnUpdate");
lua_pcall(L, 0, 0, 0);

当调用'lua_pcall'时,我在CLI中看到'在Lua中的OnUpdate',但从不'Foo'。如果我从'lua_pcall'检查错误,我会收到上面提到的错误消息。在调用'lua_pcall'之前,我是否缺少某个Lua C API函数?我知道'。'与lua中的':'相比,利用'自我'。如果我在Lua脚本中添加一个调用,如'Foo:Update()',一切都很完美。这让我很难过。

1 个答案:

答案 0 :(得分:1)

您需要将Foo的值作为第一个参数发送。所以,做

lua_pushvalue(L, -2);
lua_pcall(L, 1, 0, 0);