LUA与C++交互第一篇

    到公司已经两个周了,学习Lua已经开始在项目中使用,但是由于使用的lua函数基本上都是公司在上面进行了一次封装的,没有源代码对两种语言的交互详情还是不甚了解。如:如果向LUA注册一个对象给LUA使用,如何调用LUA中函数这些在公司的SDK看来就是一个简单的RegisterObject对象的几个属性进行填写就行了。

    今天主要是对在Lua中如何调用C++函数和在C++中如何调用Lua函数进行学习。

在LUA中要调用C++函数,那就要在C++中对Lua进行注册,如何注册呢?需要一个宏来完成功能,就是lua_register(L,"add",add),该宏对应的是两个函数,一个是lua_pushcfunction(L,f),lua_setglobal(L,n);可以看出是先对函数进行压栈、然后给函数设置一个在lua中的调用名称,注意此处的n不是表示一个整数什么的,是name的意思,表示函数的注册名。而此处lua_setglobal也是一个宏,

 #define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)
可以看出其实lua_setglobal只是lua_setfield的一个特例,因为LUA_GLOBALSINDEX是一直存在的,所以使用干函数来简单操作,当然如果我们要注册的函数不注册到全局的,而是在其他某个我们定义的表内可访问,那就要调用lua_setfield函数了。说到这个话题,设计到的函数就会越来越多,比如lua_getglobal与lua_setglobal对于,lua_getfield与lua_getfield对应,我们用到的时候再解释,不用到时就不说了。
  上面提到了使用lua_register函数进行注册,这里要强调的是该函数对注册的函数原型是有要求的,不是任何函数都可以注册,函数原型如下:
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值