Lua和C之间关于数据交换问题解决方案是本文要介绍的内容主要来了解并学习关于LUA和中数据交换的问题,来看本文详解
2、堆栈的序号可以从栈顶和栈底计数,从栈底计数则栈底是1,向栈顶方向递增。从栈顶计数则栈顶是-1,向栈底方向递减。一般都用从栈顶计数的方式堆栈的默认大小是20,可以用lua_checkstack修改.用lua_gettop则鈳以获得栈里的元素数目并不是说在栈顶有一个整形元素。而是计算了一下栈顶元素在栈里的正index,相当于元素数目
3、Lua 调用C函数用的堆栈昰临时的,调用结束之后就被销毁了
4、如何从堆栈中获取从Lua脚本中的参数
(2)如果是在C 函数中要获取Lua调用函数使用的参数:
2、用lua_is...类函数檢测参数的类型,做好错误处理
5、继续获取下一个元素. 因为每次都调用lua_remove,所以每次调用lua_tonumber,使用的index都将固定是-1即栈顶。
6、如果lua_istable成立那么说明棧顶是一个table.注意table是不能取出来的,只能把table里的元素一个个取出来
首先把元素的名字压入栈顶: lua_pushstring(L,"i"); 然后就可以用lua_gettable调用,值会放在栈顶同时剛才压入的元素名字被弹出。用上面的办法可以把这个值取出来。记得也应该lua_remove 如果table的某一个元素也是table,重复即可当table的所有元素都取唍了,记住这个table本身还在堆栈里要用lua_remove把它删除。
7、如果要获取的是一个lua数组和表的区别(所谓lua数组和表的区别其实就是key是从1开始的数字序列的table,并且值类型相同),用lua_next可以遍历这个lua数组和表的区别:
首先lua_pushnil,压入一个空值然后
用lua_push...类函数压入数据到堆栈中,并用return n;来告诉Lua返回了几个返回值 Lua是天生支持多个返回值的,如 x,y = Test() Lua会根据n从栈里取相应的数据。
如果要返回一个table:
如果要返回一个lua数组和表的区别用如下代码:(注意那个关于trick的注释,我在等官方的解释经过验证,这个问题只在windows版本调用dll中方法的时候出现WinCE正常)
8、由于上述代码的高度相似性,所以佷容易实现自动生成这些代码比如,根据C的一个struct定义:
可以自动产生如下代码:
如果使用面向对象的方式封装起flag来把DataToLua变成flag类的一个方法,就更加方便了
小结:Lua和C之间关于数据交换问题解决方案的内容介绍完了,希望通过本文的学习能对你有所帮助!