не проходит вызов ds:Size из С++

Страницы: 1
RSS
не проходит вызов ds:Size из С++, в Lua работает, в C++ возвращается 0
 
создаю в C++ источник данных, через CreateDataSource
затем возвращаю его в Lua, там беру Size, получаю допустим 800.
снова возвращаюсь в C++, беру Size - получаю 0
возвращаюсь второй раз с тем же самым источником данных, вызываю в Lua ds:Size() получаю опять 800

почему не получается размер в C+?
порядок вызова такой:
// ds уже в стеке, лежит наверху
lua_getfield(L, -1, "Size");
lua_pcall(L, 0, 1, 0);
double size = lua_tonumber(L, -1);
lua_pop(L, 1);

в size оказывается 0;
почему не 800?
 
добавил тест на тип возвращаемого значения
lua_typename(m_vm, lua_type(m_vm, -1)
говорит - nil
почему, не ясно.
 
Ну, если DS на стеке, что ж Вы его в аргументах вызова lua_pcall не учитываете?
И порядок элементов на стеке у Вас неправильный. Должно быть { Size, DS } а не { DS, Size }

Похожий пример смотрите здесь: https://forum.quik.ru/messages/forum10/message14511/topic1598/#message14511
 
Потому что метод Size принимает не ноль параметров, а один. Ему надо передать ds.

ds:Size() равно выражению ds.Size(ds)
 
спасибо, разобрался, да. действительно функции через двоеточие неявно передают self
Страницы: 1
Читают тему (гостей: 1)
Наверх