准备工作去Lua官网下载最新的Release版本,当然也可以根据具体需要下载特定的版本 。然后执行命令(这里下载的安装包是lua-5.2.3.tar.gz):$tar zxf lua-5.2.3.tar.gz$cd lua-5.2.3/$sudo make install这里需要注意的在Lua的Makefile中默认的安装路径是/usr/local,如需要修改可自行指定。另外Lua5.2参考手册也是参考必须的Lua与C交互,准备牛刀我们首先得创建Lua在C中使用的环境,利用lua_State *luaL_newstate (void);Creates a new Lua...
定义C++类首先,我们定义一个Student类,它拥有名字(字符串类型)和年龄(整型),并且提供一些getter和setter,最后还提供了一个print方法.这里有Student类的定义和实现:Student.h和Student.cppStudent.h//// Student.h// MyCppGame//// Created by guanghui on 8/11/14.////#ifndef __MyCppGame__Student__#define __MyCppGame__Student__#include <iostream>#in...
前言当我们需要在Lua里面调用C/C++函数时,所有的函数都必须满足以下函数签名:typedef int (lua_CFunction) (lua_State L);换句话说,所有的函数必须接收一个lua_State作为参数,同时返回一个整数值。因为这个函数使用Lua栈作为参数,所以它可以从栈里面读取任意数量和任意类型的参数。而这个函数的返回值则表示函数返回时有多少返回值被压入Lua栈。(因为Lua的函数是可以返回多个值的)示例一定义C++函数指针int average(lua_State *L){ // get number of arguments int ...
理解Lua栈Lua通过一个“虚拟栈”与C/C++程序进行数据交互,所有的Lua C API都是通过操作这个栈来完成相应的数据通信。Lua的这个“虚拟栈”解决了C/C++程序与Lua程序通信的两大问题:Lua使用垃圾回收,而C/C++需要手动管理内存。Lua使用动态类型,而C/C++使用的是静态类型。因为这个栈在Lua虚拟机内部,当一个Lua的变量放在栈里面的时候,虚拟机可以知道它有没有被宿主程序所使用,从而决定是否采用GC。另外Lua采用结构体封装了类似“Lua_Value”的类型,让它可以存储任何C的类型。从而在数据交换的时候,任何类型都可以被放入栈的一个slot中。由于栈是FI...