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

Lua与C的交互

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • C与lua交互解释
C和Lua的交互部分称为C API,C API是一个C代码和Lua代码进行交互的函数集,主要由以下部分组成:
1、读取Lua全局变量的函数;
2、调用Lua函数的函数;
3、运行Lua代码片段的函数;
4、注册C函数然后可以在Lua中被调用的函数;
C语言和Lua之间的数据通信交换,是通过在C和Lua之间建立一个虚拟的栈,几乎所有的API调用都是对栈上的值进行操作,所有的数据交换也是通过这个栈来进行的,而这个栈是由Lua管理的,垃圾回收器知道哪个值正在被C使用。
  • C调用lua脚本
lua脚本
width = 100
height = 101
hello = 95050

function add(a, b)
 return a + b + 100
end
main.c
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

int main(){
  lua_State *L = luaL_newstate();
 luaL_openlibs(L);

 if(luaL_loadfile(L, "test.lua") || lua_pcall(L, 0, 0, 0)){
 printf("error");
 return -1;
 }

 lua_getglobal(L, "width");
 lua_getglobal(L, "height");
 lua_getglobal(L, "hello");
 printf("width = %d\n", lua_tointeger(L, -3));
 printf("height = %d\n", lua_tointeger(L, -2));
 printf("%d\n", lua_tointeger(L, -1));

 lua_getglobal(L, "add");
 lua_pushnumber(L, 100);
 lua_pushnumber(L, 180);
 //2代表参数个数,1代表返回结果个数
  int ret = lua_pcall(L, 2, 1, 0);
 if(ret){
 //代表调用出错
 }
 if(lua_isnumber(L, -1)){
 printf("%d", lua_tointeger(L, -1));
 }
 lua_close(L);
 return 0;
}
编译运行脚本
gcc -lm -g -o test main.c ./liblua.a -ldl
./test
  • lua调用C的lib模块(需要lua 5.3以上的版本支持)
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
谈谈lua中的table.remove()以及loop+table.remove()误区发布时间:2022-07-22
下一篇:
Sublime Text3 配置 Lua5.3.5开发环境发布时间: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