lua_Stat* lua = luaL_newstate(); // 一个新的 lua 状态机
luaL_openlibs( lua ); // 加载标准lib
int my_fun_name( lua_State *L ) {
int argc = lua_gettop( L ); // 获得函数参数个数
for( int i=1; i <= argc; ++i ) {
// 注意 =
// 以下函数使用的参数序号规则如下:
// 调用参数: A B C D
// 正序序号: 1 2 3 4
// 反序序号:-4 -3 -2 -1
// 但是参数入栈却是:
// --------->
// D C B A
// lua_toboolean
// lua_tocfunction
// lua_tointeger 这是 ptrdiff_t,表示为机器最大整数类型
// lua_tonumber 这是 double
// lua_topointer
// lua_tostring 等价于 lua_tolstring ,而参数 len 设为 NULL
// lua_tolstring
// lua_tothread
// lua_touserdata userdata 和 light userdata 公用这个函数
// 将指定位置的参数转成C语言数值格式(需要它本身就是数值,否则返回0 )
printf( "lua fun arg[index: %d, type: %d, type_name: %s] : %lf\n",
i, lua_type( L, i ), lua_typename( L, i ), lua_tonumber( L, i ) );
}
// lua_to* 函数只获得参数值,参数此时还在栈上
lua_pop( L, argc ); // 弹出所有参数
// 创建一个新的 table
lua_newtable( L ); // 栈 -3
lua_pushstring( L, "name" ); // 栈 -2 key
lua_pushstring( L, "参数啊" ); // 栈 -1 value
// 另一种形式:lua_setfield( L, -3, "name" ),通过参数这是 key
lua_settable( L, -3 );
lua c api
最新推荐文章于 2024-01-05 07:04:16 发布