这里我们考虑2种情况:
1)C语言调用LUA的命名函数
2)C语言调用LUA中的匿名函数(一般匿名函数作为C函数的入参传给C)
情况1网络上一搜一大把,这里主要介绍情况2。
首先,我们知道几种常识:
1)C与LUA通过虚拟栈实现通讯
2)LUA调用C函数,在C函数中,栈中的内容为函数的参数,匿名函数作为函数的入参,自然也在栈中。
3)C中调用LUA函数(命名or匿名),先将函数入栈,再将参数逐个入栈,然后调用lua_pcall执行函数,执行完成后,将函数与参数出栈,将返回值入栈。
好了,介绍到这里,想要在C中调用匿名函数,似乎很简单,只要以下步骤:
1)从栈中取出函数,放入栈顶(拷贝或移动皆可)
2)继续放入匿名函数的参数
3)执行函数调用
4)获取返回值
5)栈恢复(返回值出栈)
int lua_test3(lua_State *L)
{
int num;
int top;
int ret;
top = lua_gettop(L);
printf("lua_test start: top = %d.\r\n", top);
/* 入参为:num,func,num */
/* 校验参数2是否是函数 *