在云风的ejoy2d里是没有dll和so之类的东西的, 所有的C扩展都是类似这样写的:
intejoy2d_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代码里, 而且比较*, 可以加'.'