2016-11-11 38 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

美麗!非常感謝! –