• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C语言中调用Lua

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

C语言和Lua天生有两大隔阂:

一、C语言是静态数据类型,Lua是动态数据类型

二、C语言需要程序员管理内存,Lua自动管理内存

 

为了跨越世俗走到一起,肯定需要解决方案。

解决第一点看上去比较容易,C语言中有union。

可是第二点呢?万一C语言正引用着Lua的一个值,Lua自动释放了怎么办?

 

所以就有了一种比union更好的解决方案:栈。

这是一个虚拟的栈,是沟通两者的桥梁,两者的数据交换全都通过这个栈进行,这样只要不pop,Lua就不会自动释放,而什么时候pop由C语言说了算。

 

下面是一段喜闻乐见的示例。

由于新建的cpp文件,所以需要extern "C" 。

 1 #include <stdio.h>
 2 extern "C" {
 3     #include <lua.h>
 4     #include <lauxlib.h>
 5     #include <lualib.h>
 6 }
 7 
 8 //调用lua中的add函数
 9 int call_lua_add(lua_State *L)
10 {
11     lua_getglobal(L, "add"); //获取add函数
12     lua_pushnumber(L, 123); //第一个操作数入栈
13     lua_pushnumber(L, 456); //第二个操作数入栈
14     lua_pcall(L, 2, 1, 0); //调用函数,2个参数,1个返回值
15     int sum = (int)lua_tonumber(L, -1); //获取栈顶元素(结果)
16     lua_pop(L, 1); //栈顶元素出栈
17     return sum;
18 }
19 
20 int main()
21 {
22     lua_State *L = luaL_newstate(); //新建lua解释器
23     luaL_openlibs(L); //载入lua所有函数库
24     luaL_dofile(L, "Test.lua"); //执行"Test.lua"文件中的代码
25     printf("%d\n", call_lua_add(L));
26     lua_close(L); //释放
27     return 0;
28 }

下面是Test.lua文件中的内容:

1 function add(x, y)
2     return x + y;
3 end

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DecodaTutorialLUA调式器强大的lua调试工具发布时间:2022-07-22
下一篇:
lua排序table.sort()用法发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap