2016-11-11 39 views
1

我的目标是简单地调用从C++使用该功能的内部“自我”来访问该表的字段和函数表函数。我一直在'self.name'这一行上得到可爱的'尝试调用nill值(本地自我)'。以下是我的Lua脚本。从C++调用Lua表函数w /函数自

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' 叫,我看 '中的OnUpdate在Lua' 在CLI中,但从来没有 '富'。如果我检查'lua_pcall'的错误,我会收到上面提到的错误消息。在调用'lua_pcall'之前我是否缺少某个Lua C API函数?我知道''。与lua中的':'利用'自我'。如果我在“Foo:Update()”这样的Lua脚本中添加一个调用,那么一切都很完美。这让我很难过。

回答

0

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

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

美丽!非常感谢! –