Lua也用了有段时间了,lua跟c++的交互以前用的是luabind,但是需要boost库,太大了,我的需求也没那么多。所以项目引入lua的时候,我决定找个简单点的库,这时候发现了lua_tinker,很小巧,就两个文件.h和.cpp,引入也很方便。网上看了看教程,我要的功能都有了,就是它了。
用了这么长时间,也没仔细研究研究,也就是机械的用而已,这样可不行。
花了两天时间研究它,下面是一点点心得。
传统的lua跟c交互,主要是利用虚拟栈,但是很不方便,基本也就是写写demo的样子,比如调用lua中的函数
function add(a,b) return a+b end
c代码中调用,就自己把两个参数push进去,然后lua_pcall一下,完事了。可是稍微复杂点的怎么弄,比如传一个对象的指针当参数?
先来分析一下lua/c相互操作的几种模式:
1. 调用lua的全局函数 大概形式 call(“test”,a,b,c) 其中test是lua中的函数名,abc是参数,abc有可能是对象的指针之类的。
2. 如果上面abc有可能是对象的指针,假如是a,那么有可能取到a的成员变量,在lua中是a.x 的形式
3. 同2,有可能调用a的成员函数,在lua中是a:test() 的形式
4. lua中调用c中的全局函数
代码大概是下面这个形式: