在C端嵌入Lua模块

时间:2015-03-16 11:14:35

标签: c lua

我想为用户提供几个自定义功能,但隐藏它的实现,将其作为一个简单的DLL发送。
所以用户只需链接dll和插件就可以了。在C端动态声明了几个表,整数等,但是从C中声明"类",面向表的函数使得代码不可读。
例如,有没有办法在标题中嵌入Lua模块,并预加载它以便主脚本用户加载 luaL_loadfile 将能够访问它? 当然,我可以通过在用户脚本中插入代码来破解它,但这似乎是一个坏主意。

1 个答案:

答案 0 :(得分:2)

  

有没有办法将Lua模块嵌入到标题中,例如,并预加载它以便主脚本用户加载luaL_loadfile将能够访问它?

是。您可以使用bin2c.lua(或底部列出的任何替代方案)。

以下是名为fakeredis.c的项目中的实际示例:

Makefile包含一个专用目标,用于创建由嵌入的各种模块的Lua字节码组成的标头:

fklua.h:
    @echo "converting lua -> C..."
    @./lua2c.sh

(幕后lua2c.sh使用bin2c.lua

例如,项目包含名为fmtreply.lua的模块。转换后,该模块简单地定义为字节数组:

/* fklua.h */

/* this is the name of the main function the module exposes */
#define FK_LUA_FMTREPLY "_fmtreply"

/* this is the byte code of the module obtained with `bin2c.lua` */
static const unsigned char fk_lua_fmtreply[]={45, 45, 32, ...};

然后通过luaL_loadbuffer在主库中显式加载模块(有关详细信息,请参阅herethere)。

相关问题