Тема: Что то непонятно с вызовом Lua функций из C++
Подскажите пожалуйста, что то я вдруг понял, что не понял, как вызывается Lua функция из C++.
Предположим вот есть такой скрипт в Квике:
function my_func_Lua(msg)
message(msg)
end
В С++ такой код:
static int forLua_my_func_TEST(lua_State* L)
{
int size_stack = lua_gettop(L);
std::cout << "size_1:" << size_stack << std::endl; //0
lua_getglobal(L, "my_func_Lua");
int size_stack = lua_gettop(L);
std::cout << "size_2:" << size_stack << std::endl; //1
lua_pushstring(L, "1");
int size_stack = lua_gettop(L);
std::cout << "size_3:" << size_stack << std::endl; //2
int status = lua_pcall(L, 1, 0, 0);
int size_stack = lua_gettop(L);
std::cout << "size_4:" << size_stack << std::endl; //0
return 0;
}
1)А теперь вопрос: почему этот код сработал ?
Ведь в lua_pcall - я указал только один аргумент, а по факту их два: это сама функция, которая добавилась на стек вызовов lua_getglobal и второй аргумент строка "1".
Но это сработало и функция my_func_Lua - вызвалась и вывело переданное значение.
2)Почему после вызова lua_pcall - размер стека - стал равен нулю, если после вызова lua_pcall - должен удалять аргумента со стека в кол-ве указанных в функции lua_pcall переданных аргументов ? Теоретически - размер стека должен был стать - 1 - где этот один - это функция my_func_Lua.
Что то не понятно совсем.