lua 5.2 实现luaL_register 功能

来源:互联网 发布:windows配置文件丢失 编辑:程序博客网 时间:2024/04/30 23:39

lua 5.2 去掉了luaL_register功能,不能直接注册函数到一个全局table中了。

网上找了很多文章都是要导出到库,再引用库。

// my_math.c  #include <lua.h>#include <lauxlib.h>#include <lualib.h>  #include <math.h>#include <stdio.h>    static int my_math_sin (lua_State *L) {lua_pushnumber(L, sin(luaL_checknumber(L, 1)));return 1;}  static int my_math_cos (lua_State *L) {lua_pushnumber(L, cos(luaL_checknumber(L, 1)));return 1;}    static const luaL_Reg mathlib[] = {{"my_cos",   my_math_cos},{"my_sin",   my_math_sin},{NULL, NULL}};  /*** Open my_math library*/LUALIB_API int luaopen_my_math (lua_State *L) {  luaL_newlib(L, mathlib);  return 1;}

LUALIB_API 是导出导入函数或extern,看是否指定 LUA_BUILD_AS_DLL

// callc.lua  my_math = require("my_math") --my_math 是一个dll或so,由下面的.c生成   print(my_math.my_sin(3.14))print(my_math.my_cos(3.14))


如果要实现luaL_register,可以不导出dll,改用luaL_requiref在c里面注册这个load方法

luaL_requiref(L,"my_math",luaopen_my_math,0);
这样就不用导出dll了,直接在exe里就行了




0 0
原创粉丝点击