使用C/C++写Lua扩展
一个例子
test.c
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h" //编译安装会获得这些库文件
static int test(lua_State* lua){
const char *name = NULL; //指针,用于存储
name = luaL_checkstring(lua,1); //出栈,从栈中取一个参数
printf("Hello ",name);
lua_pushstring(lua,name); //入栈,返回数据
return 1; //告诉Lua返回值个数
}
//一个映射表,映射模块中的函数
static const struct luaL_Reg libtest[] = {
{"test",test}, //Lua函数名,函数地址
{NULL,NULL}
};
//注册函数
int luaopen_test(lua_State* lua){
//luaL_register(lua, "hello", libhello); 在5.1(含)版本前,需要通过此函数注册模块
//5.1后注册方式
lua_newtable(lua);
luaL_setfuncs(lua,libtest,0);
return 1;
}
编译:
gcc test.c -fPIC -shared -o test.so //编译为动态链接库
调用:
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> test = require 'test'
> test.test('jiang')
Hello jiang
一些Api
出栈,取参数:
入栈,返回