在C端嵌入Lua模块。

我想提供用户几个自定义函数来使用,但隐藏其实现以将其作为简单的 DLL 发布。

所以,用户只需链接 DLL,插件即可正常工作。多个表、整数等在 C 端动态声明,但从 C 声明“类”、面向表的函数使代码难以阅读。

是否有一种方式可以将 Lua 模块嵌入到头文件中,并预加载它,以使主脚本用户使用 luaL_loadfile 时能够访问它? 当然,我可以通过向用户脚本插入代码来进行脏“黑客”,但这似乎是个坏主意。

点赞
用户1688185
用户1688185

有没有一种方法可以将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 */

/* 这是模块公开的主要功能的名称 */
#define FK_LUA_FMTREPLY "_fmtreply"

/* 这是使用`bin2c.lua`获得的模块的字节码 */
static const unsigned char fk_lua_fmtreply[]={45, 45, 32, ...};

然后,该模块由luaL_loadbuffer明确加载到主库中(有关更多详细信息,请参见这里那里)。

2015-03-16 17:49:40