前言当我们需要在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...
Mac项目集成Lua准备工作首先,新建一个控制台应用程序。 打开Xcode,New->Project->OSX->Command Line Tool,取名为Lesson01接下来,我们需要下载lua5.2.3.,下载完后,解压缩,然后cd到刚刚解压缩的路径下面,输入make macosx,这样便可以生成Mac下面的lib文件。接下来把刚刚解压缩的文件夹拷贝到你新建的工程下面,然后设置include路径和library路径。(注意,这里是不需要把头文件添加到Xcode里面的,只要指定include路径,编译的时候,编译器会自动去找的。)因为我的Lua文件夹的路径是:xxxx/Lesso...