2016-11-11 2 views
1

Моя цель - просто вызвать функцию таблицы из C++, которая использует «self» внутри функции для доступа к полям и функциям этой таблицы. Я продолжаю получать прекрасную «попытку назвать значение nill (local self)» на линии с «self.name». Ниже мой сценарий Lua.Вызов функции таблицы Lua из C++ w/self in function

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, но никогда 'Foo'. Если я проверю ошибку с 'lua_pcall', я получаю сообщение об ошибке, упомянутое выше. Я пропустил некоторую функцию API Lua C до вызова 'lua_pcall'? Я знаю об этом. vs. ':' в lua для использования «я». Если я добавлю вызов в сценарий Lua, например «Foo: Update()», все работает отлично. Это меня насторожило.

ответ

0

В качестве первого аргумента необходимо отправить значение Foo. Итак, do

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

Красивая! Спасибо огромное! –

Смежные вопросы