Функции, которые вы регистрируете в Lua, всегда должны иметь одну и ту же сигнатуру C или C ++: int FuncName(lua_State*);
Они могут принимать не больше или меньше параметров, чем эта.
Параметры Lua, передаваемые зарегистрированным функциям, являются частью lua_State*
. Это первые значения, помещенные в стек Lua. Таким образом, вы можете позвонить lua_gettop
, чтобы получить количество параметров. И вы можете использовать обычные функции стека Lua, чтобы извлечь их из стека.
Например, если вы хотите, чтобы ваша функция имела два параметра, где первый - число, а второй - строка, вы делаете это:
int functionName(lua_State *L)
{
int arg1 = 0;
const char *arg2 = NULL;
size_t arg2Len = 0; //Lua strings have an explicit length; they can contain null characters.
if(lua_gettop(L) != 2)
{
lua_pushstring(L, "Must provide two parameters to this Lua function.");
lua_error(L);
}
arg1 = luaL_checkinteger(L, 1);
arg2 = luaL_checklstring(L, 2, &arg2Len);
//Do stuff with arguments.
}