#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <lua5.2/lua.h>
#include <lua5.2/lualib.h>
#include <lua5.2/lauxlib.h>
lua_State* L;
typedef struct user_data_s
{
int number;
char name[32];
} user_data_t;
int main(int argc, char *argv[])
{
user_data_t *user_data = NULL;
user_data_t *tmp_user_data = NULL;
int element_cnt = 0;
user_data = (user_data_t *)malloc(sizeof(user_data_t));
if (NULL == user_data)
{
exit(1);
}
memset(user_data, 0, sizeof(user_data_t));
user_data->number = 80;
snprintf(user_data->name, sizeof(user_data->name), "%s",
"hello world");
L = luaL_newstate();
luaL_openlibs(L);
element_cnt = (int)lua_gettop(L);
printf("before push userdata: ele_cnt:%d\n", element_cnt);
lua_pushlightuserdata(L, (void *)user_data);
element_cnt = (int)lua_gettop(L);
printf("after push userdata: ele_cnt:%d\n", element_cnt);
tmp_user_data = lua_touserdata(L, 1);
if (NULL == tmp_user_data)
{
printf("NULLL data\n");
return 0;
}
printf("get userdata: a:%d, name:%s\n", tmp_user_data->number,
tmp_user_data->name);
element_cnt = (int)lua_gettop(L);
printf("after get: ele_cnt:%d\n", element_cnt);
lua_pop(L, 1);
element_cnt = (int)lua_gettop(L);
printf("after pop: ele_cnt:%d\n", element_cnt);
lua_close(L);
return 0;
}
编译:
gcc add.c -llua5.2
运行结果:
before push userdata: ele_cnt:0
after push userdata: ele_cnt:1
get userdata: a:80, name:hello world
after get: ele_cnt:1
after pop: ele_cnt:0