lua 5.2 实现luaL_register 功能

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里就行了




  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值