lua & c & c++

来源:互联网 发布:中国护理质量数据平台 编辑:程序博客网 时间:2024/06/16 06:41
  • 无论是lua调用c函数,还是c/c++调用lua函数,他们之间的交互用的栈并不是全局栈,每个函数都维护着一个自己的私有栈,所有的交互数据均保存在这个私有栈中。
    当lua调用c函数时,lua把所有参数都压进函数的私有栈中,并且第一个参数在栈中的位置必定为index=1,第二个参数为index=2,以此类推.

LuaGlue

lua可以让程序员开发在lua脚本中调用c/c++函数的接口。
我们把这些接口称做luaGLue函数。

lua_State* pLuaState = lua_open()luaopen_base(pLuaState)lua_iolibopen(pLuaState)lua_strlibopen(pLuaState)lua_mathlibopen(pLuaState)lua_dblibopen(pLuaState)

lua_open返回一个指向lua运行环境的指针。
创建好lua_State结构后,应用程序需要的Lua程序库就被初始化好了。

lua_close(pLuaState)关闭lua环境,释放pLuaState

LuaGlue函数是一种C++函数,按照一定规则开发,可以直接被Lua脚本调用。这是Lua脚本和c++代码通信的主要方式。当需要调用c++函数时,就通过luaglue函数来完成操作。

可以先用lua编写需要的函数,当发现性能瓶颈时再换成c++实现。

lua通过lua栈来让LuaGlue函数具有向函数传递参数的能力。

lua中的数字等同于c++中的双精度浮点数(double)
字符等同于空值终止字符串(string)
Lua table也可以作为LuaGlue函数的参数,不过使用Lua ANSI C API操作表是一件很麻烦的事。

cLua具有获取LuaGlue函数的参数的方法
GetStringArgument返回指向空值终止字符创的指针
GetNumberArgument返回双精度浮点数或者0.0表示没有参数
两个方法都有一个参数用来指定要获取的参数位置,从1开始。

返回值也使用lua栈处理。
向函数调用返回数值时,就把该值存入lua栈中,并且在c++返回语句中指定返回值个数。
Lua函数可以返回多个值。LuaGlue也支持,返回值的个数一定要和添加到lua栈中的返回值个数一致。
lua_pushstring和lua_pushnumber可以向lua栈中存入返回值。

LuaGLue就是让lua脚本访问c++函数的接口。
C++程序员为lua程序员开发的api促成了这门脚本语言强大的能力。
c++程序员可以提供所有类型的数据和功能给Lua程序员,并且让程序接口易于调试。

setpeer getpeer

每个c++对象需要存储自己的成员变量的值,这个值不能存储在元表里,因为元表是类共用的,所以每个对象要用一个私有的表来存储,这个表在tolua里叫做peer表。

元表的__index指向了一个c函数,都在lua中要访问一个c++对象的成员变量(准确的说是一个域时),会调用这个c函数,在这个c函数中,会查找各个关联表来取得要访问的域,这其中就包括peer表的查询.

tolua

类型强制转换 tolua.cast(c,”CCSprite”)

0 0