一个例子

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

出栈,取参数:
1.png
入栈,返回
2.png

标签: Lua

添加新评论