I ont une fonction de C (A) test_callback
accepter un pointeur vers une fonction (B) en tant que paramètre et A sera "callback" B.comment callback une fonction de lua de la fonction de courant alternatif
//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
Maintenant, Je veux envelopper test_callback
afin qu'ils puissent être appelés à partir de lua, supposons que le nom est lua_test_callback
, et aussi le paramètre d'entrée à ce serait une fonction lua. Comment devrais-je atteindre cet objectif?
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 fournissent un moyen de stocker la fonction de rappel pour une utilisation ultérieure.
//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
Il est préférable d'utiliser lua_pcall qui poussera une erreur sur la pile plutôt que de simplement s'écraser. –
Bon exemple correct. Mais en pratique, il est préférable d'utiliser une interface commune, bien testée, malgré l'écriture de telles fonctions lua_test_callback() encore et encore. –