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