有关这个问题的代码是在这里:https://github.com/jchester/lua-polarssl/tree/master/src为Lua包装一个C库:我如何创建函数的嵌套表?
目前我正在试图包裹PolarSSL库(http://polarssl.org)的一部分给我访问SHA-512 HMACs(luacrypto做不提供这个)。
我的目标的API的形式为:
a_sha512_hash = polarssl.hash.sha512('text')
或更充分
local polarssl = require 'polarssl'
local hash = polarssl.hash
a_sha512_hash = hash.sha512('test')
如果你是指在链接polarssl.c上面,你会看到我已经编写了包装PolarSSL代码的函数。然后,我想这样来构建功能表:
LUA_API int luaopen_polarssl(lua_State *L) {
static const struct luaL_Reg core[] = {
{ NULL, NULL }
};
static const struct luaL_Reg hash_functions[] = {
{ "sha512", hash_sha512 },
{ "sha384", hash_sha384 },
{ NULL, NULL }
};
static const struct luaL_Reg hmac_functions[] = {
{ "sha512", hmac_sha512 },
{ "sha384", hmac_sha384 },
{ NULL, NULL }
};
luaL_register(L, CORE_MOD_NAME, core);
luaL_register(L, HASH_MOD_NAME, hash_functions);
luaL_register(L, HMAC_MOD_NAME, hmac_functions);
return 1;
}
其中CORE_MOD_NAME = 'polarssl',HASH_MOD_NAME = 'polarssl.hash',HMAC_MOD_NAME = 'polarssl.hmac'。
当我运行在这个问题的顶部类似的Lua代码的测试脚本,我得到这个:
lua: test.lua:23: attempt to index global 'polarssl' (a nil value)
stack traceback:
test.lua:23: in main chunk
[C]: ?
我试图寻找如何实现这个module.submodule方法的例子(例如naim vs luasockets),但每个人似乎都有不同的实现方式。我完全失去了。
我无法链接到naim和luasockets,因为我点击了链接上的<10点限制。 – 2012-03-02 03:18:58
看起来业力就像美味的糖果一样分发,所以更新后的链接。 – 2012-03-02 03:31:40