bool LuaStack::pushFunctionByHandler(int nHandler)
{
    toluafix_get_function_by_refid(_state, nHandler);                  /* L: ... func */
    if (!lua_isfunction(_state, -1))
    {
        CCLOG("[LUA ERROR] function refid '%d' does not reference a Lua function", nHandler);
        lua_pop(_state, 1);
        return false;
    }
    return true;
}
示例#2
0
int GELuaEngine::run_function( LUA_FUNCTION func_id, int args_cnt )
{
	if (lua_state_ == NULL) return false;

	toluafix_get_function_by_refid(lua_state_, func_id);
	if (!lua_isfunction(lua_state_, -1))
	{
		fprintf(stderr, "function refid '%d' does not reference a Lua function\n", func_id);
		lua_pop(lua_state_, 1);
		lua_settop(lua_state_, 0);
		return false;
	}

	if (args_cnt > 0)
	{
		lua_insert(lua_state_, -(args_cnt + 1));
	}
	int ret = _execute_function(args_cnt);

	lua_settop(lua_state_, 0);
	return ret;
}
int lua_glue_auto_GlDisplayService_addWindowCloseListener(lua_State* L)
{
    display::GlDisplayService* cobj = (display::GlDisplayService*)tolua_tousertype(L, 1, 0);
    bool ok = true;

    std::function<void (int)> listener;

    int listenerFunc = toluafix_ref_function(L, 2, 0);
		
		listener = [=](int larg0) -> void {
		    toluafix_get_function_by_refid(L, listenerFunc);
		    tolua_pushnumber(L, (lua_Number)larg0);
		    LuaStack::executeFunction(L, 1);
		};

    if (!ok)
    {
        tolua_error(L, "invalid arguments in function 'lua_glue_auto_GlDisplayService_addWindowCloseListener'", nullptr);
        return 0;
    }
    int ret = cobj->addWindowCloseListener(listener);
    tolua_pushnumber(L, (lua_Number)ret);
    return 1;
}