lua的C库

在云风的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库写法也有其好处:
  1. 不需要导出为dll或so
  2. 初始化函数名可以不为 luaopen_*
  3. 库名的定义直接写在c代码里, 而且比较自由, 可以加'.'
posted @ 2014-05-14 10:23  大龄程序员的日记本  阅读(760)  评论(0编辑  收藏  举报