C语言调用LUA匿名函数

这里我们考虑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是否是函数 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值