基于Lua源码开发动态库供lua脚本使用

通过require的方式可以加载动态库,然后脚本就可以使用库中提供的函数,一般过程如下:

比如有一个动态库名为:MyFirstLua.dll

则使用时:MyFirstLua = require("MyFirstLua")

导出的函数接口名称一定是 int luaopen_XXXX(lua_State* L)格式,且XXXX一定是导出库的文件名

#ifdef __cplusplus
extern "C" {
#endif

#include "lua/lua.h"
#include "lua/lauxlib.h"
#include "lua/lualib.h"

#ifdef __cplusplus
}
#endif

#pragma comment(lib, "liblua.lib")


static int export_add(lua_State *L) {
    if (lua_isinteger(L, 1) && lua_isinteger(L,2)) {
        lua_Integer n = lua_tointeger(L, 1);
        lua_Integer n2 = lua_tointeger(L, 2);
        lua_pushinteger(L, n+n2);
    }
    else
        lua_pushnil(L);
    return 1;
}

static int export_print(lua_State* L)
{
    return 0;
}

static const luaL_Reg exportLib[] = {
    {"add",export_add},
    {"print",export_print},
    {NULL, NULL}
};

#ifdef __cplusplus
extern "C" {
#endif
    __declspec(dllexport) int luaopen_MyFirstLua(lua_State* L)
    {
        luaL_newlib(L, exportLib);
        return 1;
    }

#ifdef __cplusplus
}
#endif

上述代码导出一个MyFirstLua的dll库,并且导出luaopen_MyFirstLua函数接口。

在该函数中通过luaL_newlib的方式将函数注册导出到MyFirstLua表对象中。

通常导出函数形如:static int export_myfunction(lua_State* L),它的返回值代表这这个导出函数在脚本中应该返回多少个值

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值