Lua怎么调用C/C++函数/库
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Lua怎么调用C/C++函数/库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。test.cpp文件/*Lua调用C/C++函数/库(
千家信息网最后更新 2026年11月03日Lua怎么调用C/C++函数/库
Lua怎么调用C/C++函数/库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
test.cpp文件
/*Lua调用C/C++函数/库(函数压栈方式)*/#includeusing namespace std;#include /*当我们需要在Lua里面调用C/C++函数时,所有的函数都必须满足以下函数签名:typedef int (*lua_CFunction) (lua_State *L);换句话说,所有的函数必须接收一个lua_State作为参数,同时返回一个整数值。因为这个函数使用Lua栈作为参数,所以它可以从栈里面读取任意数量和任意类型的参数。而这个函数的返回值则表示函数返回时有多少返回值被压入Lua栈。(因为Lua的函数是可以返回多个值的)*/static int math_abs(lua_State *L){ lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); //获取传入的参数 return 1;}static int math_cos(lua_State *L){ lua_pushnumber(L, cos((double)luaL_checknumber(L, 1))); return 1;}static int math_sin(lua_State *L){ lua_pushnumber(L, sin((double)luaL_checknumber(L, 1))); return 1;}static int ShowMessage(lua_State * L){ lua_pushnumber(L, 1000); printf("show message and push 1000 \n"); return -1;}//注册函数void regist_function(lua_State *L){ //压栈后设置一个lua可调用的全局函数名 lua_pushcfunction(L, ShowMessage); lua_setglobal(L, "showmessage"); //c调用lua lua_getglobal(L, "SHOWMESSAGE"); lua_pcall(L, 0, 0, 0); printf("get the showmessage pushed value %f \n", lua_tonumber(L, -1)); //#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) //lua_register的定义如上,所有 lua_pushcfunction(L, ShowMessage);lua_setglobal(L, "showmessage"); <==>lua_register(L, "showmessage", ShowMessage); lua_register(L, "cos", math_cos); //测试 lua_getglobal(L, "COS"); lua_pushnumber(L, 0.5); if (0 != lua_pcall(L, 1, 1, 0)) { printf("cpp call lua function failed\n"); } printf("cos(0.5)=%f\n", lua_tonumber(L, -1)); lua_pop(L, 1);}//注册库函数void regist_lib(lua_State *L){ static const luaL_reg mathlib[] = { { "abs", math_abs }, { "cos", math_cos }, { "sin", math_sin }, { NULL, NULL } }; luaL_register(L, "DY_MATH", mathlib); //测试 double sinv = 30*3.1415926/180.0; lua_getglobal(L, "SIN"); lua_pushnumber(L, sinv); if (0 != lua_pcall(L, 1, 1, 0)) { printf("cpp call lua function failed\n"); } printf("sin(%f)=%f\n", sinv, lua_tonumber(L, -1)); lua_pop(L, 1);}int main(){ lua_State *L = luaL_newstate(); luaL_openlibs(L); char *luapath="LuaCallCTest.lua"; luaL_dofile(L, luapath); regist_function(L); regist_lib(L); lua_close(L); system("pause"); return 0;}
LuaCallCTest.lua文件
--region LuaCallCTest.luafunction COS(a) print("called COS in lua script") --lua调用c/c++函数 return cos(a)endfunction SIN(a) print("called SIN in lua script") --lua调用c/c++库函数 return DY_MATH.sin(a)endfunction SHOWMESSAGE() showmessage()end--end region结果
关于Lua怎么调用C/C++函数/库问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
函数
参数
问题
文件
更多
帮助
测试
解答
易行
简单易行
全局
内容
同时
多个
如上
小伙
小伙伴
换句话说
数值
数量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳恒合互联网络科技有限公司
互联网巨头科技公司
互联网与科技发展
腾讯阿里互联网科技
上海互联网科技有限公司
互联网的科技创新
杭州互联网科技公司
互联网与未来科技
未来的互联网科技
智慧科技互联网
亿人帮互联网科技
哈尔滨新华互联网科技
电子科技大学互联网创业大赛
深圳市罗太互联网科技有限公司
中科明德北京互联网科技
四川互联网展示科技馆设计
广东鹅鹅鹅互联网科技有限公司
信承诺互联网科技有限公司
兰石爱特工业互联网科技分公司
青岛易易互联网科技
互联网科技图片
上海睿民互联网科技有限公司
互联网科技工作委员会
菲比寻常互联网科技
掌上梦互联网科技
高科技互联网套路
艺电能源互联网科技有限公司招聘
互联网领先科技活动
东风日产互联网科技公司叫什么
前海云享互联网科技