C语言调用lua

本文介绍如何在Lua中使用C语言调用Lua函数,包括压入函数、参数及结果处理等步骤,并通过具体示例说明lua_getglobal、lua_pushnumber及lua_pcall等API的使用。
在lua API中,调用一个函数的步骤很简单:
1.压入你要调用的函数,使用lua_getglobal。
2.压入调用参数。
3.使用lua_pcall
4.从栈中弹出结果。
 
举例说明,假设你有这么一个lua函数:
function f (x, y)
     return (x^2 * math.sin(y))/(1 - x)
end
 
那么,我们就可以定义个c函数来封装这个调用:
/* call a function 'f' defined in Lua */
double f (double x, double y) 
{
double z;
lua_getglobal(L, "f"); 
lua_pushnumber(L, x); 
lua_pushnumber(L, y); 
/* do the call (2 arguments, 1 result) */
if (lua_pcall(L, 2, 1, 0) != 0)
     error(L, "error running function 'f': %s",
lua_tostring(L, -1));
 
if (!lua_isnumber(L, -1))
     error(L, "function 'f' must return a number");
z = lua_tonumber(L, -1);
lua_pop(L, 1); 
return z;
}
 
lua_pcall在压入结果的之前,会将函数,和参数弹出,如果返回多个结果,第一个最先压入。如果lua_pcall运行出错,那么会返回个非0值。
 
 

转载于:https://www.cnblogs.com/cjswwdz/p/5625489.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值