Tengo una función C (A) test_callback
aceptar un puntero a una función (B) como el parámetro y A se "devolución de llamada" B.cómo devolución de llamada una función lua de función ac
//typedef int(*data_callback_t)(int i);
int test_callback(data_callback_t f)
{
f(3);
}
int datacallback(int a)
{
printf("called back %d\n",a);
return 0;
}
//example
test_callback(datacallback); // print : called back 3
Ahora, Quiero envolver test_callback
para que puedan ser llamados desde lua, supongo que el nombre es lua_test_callback
; y también el parámetro de entrada a la que sería una función Lua. ¿Cómo debería lograr este objetivo?
function lua_datacallback (a)
print "hey , this is callback in lua" ..a
end
lua_test_callback(lua_datacallback) //expect to get "hey this is callback in lua 3 "
EDIT:
This link proporcionan una manera de almacenar la función de devolución de llamada para su uso posterior.
//save function for later use
callback_function = luaL_ref(L,LUA_REGISTRYINDEX);
//retrive function and call it
lua_rawgeti(L,LUA_REGISTRYINDEX,callback_function);
//push the parameters and call it
lua_pushnumber(L, 5); // push first argument to the function
lua_pcall(L, 1, 0, 0); // call a function with one argument and no return values
Es preferible utilizar lua_pcall lo que empujará un error en la pila en lugar de sólo estrellarse. –
Buen ejemplo correcto. Sin embargo, en la práctica, es mejor usar interfaz común, bien probado, a pesar de escribir tales lua_test_callback() funciona una y otra vez. –