【发布时间】:2010-04-23 16:48:38
【问题描述】:
我有一个 C 函数 (A) test_callback 接受指向函数(B) 的指针作为参数,A 将“回调”B。
//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
现在,我想包装 test_callback 以便可以从 lua 调用它们,假设名称是 lua_test_callback ;并且它的输入参数将是一个 lua 函数。我应该如何实现这个目标?
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 "
编辑:
This link 提供了一种存储回调函数供以后使用的方法。
//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
【问题讨论】: