在云风的ejoy2d里是没有dll和so之类的东西的, 所有的C扩展都是类似这样写的:
int
ejoy2d_shader(lua_State *L) {
luaL_Reg l[] = {
{"load", lload},
{"unload", lunload},
{"draw", ldraw},
{"blend", lblend},
{"version", lversion},
{NULL,NULL},
};
luaL_newlib(L,l);
return 1;
}
调用的时候需要先在C程序里:
luaL_requiref(L, "ejoy2d.shader.c", ejoy2d_shader, 0);
这样就相当于把ejoy2d_shader里注册的函数都绑定到ejoy2d.shader.c这个模块上了.
在lua里要调用的时候, 形式与一般C库的调用一样:
local s = require "ejoy2d.shader.c"
这是在网上找的一个关于这种写法的说明, 中文的.
我觉得这样的C库写法也有其好处:
- 不需要导出为dll或so
- 初始化函数名可以不为 luaopen_*
- 库名的定义直接写在c代码里, 而且比较自由, 可以加'.'
|
请发表评论