- Call C from Lua(在Lua中调用C动态库函数)
- C函数原型知足:typedef int (lua_CFunction) (lua_State L);
该函数类型仅仅包含一个表示Lua环境的指针做为其惟一的参数,实现者能够经过该指针进一步获取Lua代码中实际传入的参数
返回值: 返回结果的个数(returns the number of results);没有返回值时,返回0
注册C函数: void lua_register (lua_State L,const char name,lua_CFunction f);
解释:Lua环境指针L;Lua中可见的函数名name;C中的函数指针f函数
- 注册C函数库:void luaL_register (lua_State L,const char libname,const luaL_Reg *l);
加载C动态库过程:require(XXX)
解释:查找动态库XXX.so;执行动态库中的函数是luaopen_XXX完成注册ui
- 动态库生成命令gcc -Wall -shared -fPIC -o XXX.so -llua
若是出现自定义C函数与lua中的函数重名,则会出现lua C stack overflow错误

- C从lua调用的C代码获取参数和返回值
参数: 若是Lua代码在调用时传递的参数,1表示Lua调用时的第一个参数(从左到右),依此类推。luaL_checknumber、luaL_checkstring能够得到参数
返回值入栈:lua_pushnumber、lua_pushstring、lua_pushlstring;而且须要返回返回值的数目
- userdata:
void*lua_newuserdata (lua_State *L, size_t size); //full userdata 是一片原始的内存区
void lua_pushlightuserdata (lua_State *L, void*p); //light userdata 是一个表示C指针的值,void *类型
void *lua_touserdata(lua_State *L, int index); //假如给定的索引位置是full userdata,则返回内存块地址;假如给定的索引位置是light userdata,则返回指针,不然返回NULL