• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言调用Lua函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪。

那个时期,人们常常称互联网为赛博空间。现在工作了,大量的零碎时间用于上微博,知乎,QQ。这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息。

然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题。阅读了相当于一部《红楼梦》那么多的文字。仅仅是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识。在你的时间线上,两条相邻信息往往是八竿子也打不着的。并且你还时不时去看看关注者有没有更新。期待让你眼前一亮的信息。结果往往是趁兴而去,败兴而回。屏幕上的信息永无止境界滚动着,是如此的热闹,仿佛每一个人都在狂欢,而我的内心却如此的空虚与孤独。



在lua API中。调用一个函数的步骤非常easy:
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值。

(完)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua_call/lua_pcall/xpcall发布时间:2022-07-22
下一篇:
lua的语法糖发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap