lua 5.2 實現luaL_register 功能
阿新 • • 發佈:2019-01-10
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裡就行了