假设lua中:

name="gzw"
id=17010805
sex=man tab={
num=100,
str="hello"
} foo_one=function()
print("不带参数的foo()被调用了")
end foo_two=function(num)
print("num=",num)
return num
end

接下来要在C++中调用lua.

首先看调用全局变量:

int main()
{
lua_State* L=luaL_newstate(); //创建lua虚拟栈
luaL_openlibs(L); //打开需要链接的库
luaL_dofile(L,"a.lua");
lua_getglobal(L,"name"); //把lua中的全局变量name拿出来压入了虚拟栈中
lua_getglobal(L,"id");
printf("栈中元素个数为:%d\n",lua_gettop(L)); //得到栈顶的索引,相当于求栈的长度 const char* str=lua_tostring(L,1); //压入的为字符长,所以根据索引转化打印
int id=lua_tonumber(L,2);
printf("str=%s\n",str);
printf("id=%d\n",id); lua_close(L);
return 0;
}

接下来看C++调用lua表中的字段

lua_getglobal(L,"tab");
lua_pushstring(L,"str"); lua_gettable(L,-2); printf("tab.str=%s\n",lua_tostring(L,-1));
lua_pop(L,1);
lua_pushstring(L,"num");
lua_gettable(L,-2); printf("tab.num=%g\n",lua_tonumber(L,-1));

lua_gettable(L,Index)   index指的是表,执行这句话会把栈顶元素当成键,根据这个键把对应的值找到,然后把值压入表中,也就是执行完这段后,栈顶元素为tab,但是里面有了值.

lua_getfield(L,-1,"num");这句等价于 lua_pushstring(L,-1,“num”); lua_gettable(L,-2);

C++调用lua中的函数:

lua_getglobal(L,"foo_one");

lua_pcall(L,0,0,0); 

lua_getglobal(L,"foo_two");
lua_pushnumber(L,123);
lua_pcall(L,1,1,0);

C++与lua交互之C++访问lua的更多相关文章

  1. C++与lua交互

    项目开发的脚本层用的是Lua,引擎用的是C++.但是经理不给开放引擎层的代码.刚好最近项目空闲,安排了学习C++跟Lua的通信. 一.C++与Lua数据交互 数据交互主要是通过C API来实现 首先, ...

  2. Linux下C/C++和lua交互-Table

    本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...

  3. 教程二 网页和lua交互修改openwrt

    硬件 http://zhan.renren.com/h5/entry/3602888498044209332 GL-iNet 1 首先安装 webserver之lighttpd  ,openwrt自带 ...

  4. C++与Lua交互(四)

    引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...

  5. C++与Lua交互(三)

    通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...

  6. C++与Lua交互(二)

    上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...

  7. C++与Lua交互(一)

    引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...

  8. 最优雅的C++跟lua交互.

    我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...

  9. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

随机推荐

  1. Spring核心原理之 IoC容器中那些鲜为人知的细节(3)

    本文节选自<Spring 5核心原理> Spring IoC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化.使用FactoryBean产生或者修饰Bean对象的生成. ...

  2. 缓存Bigkey坚决不要用,拆分是王道

    大家好,我是架构摆渡人.这是实践经验系列的第四篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. 背景介绍 在高并发的业务场景中,缓存是必须要上的,用来扛高并发 ...

  3. 【LeetCode】1419. 数青蛙 Minimum Number of Frogs Croaking (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...

  4. sql注入 —sqli-labs/Less-5 逻辑注入

    逻辑注入: 1.尝试查询数据库: (1)判断数据长度 -- 构造逻辑判断:and length(database())=8 当长度等于"8 "时回显正常,所以数据库长度为" ...

  5. Codeforces 567D:One-Dimensional Battle Ships(二分)

    time limit per test : 1 second memory limit per test : 256 megabytes input : standard input output : ...

  6. ROC and AUC

    目录 概 TPR, FPR ROC and AUC 代码 ROC-wiki 概 AUC常常在文章中作为评价一个分类器优劣的指标, 却总是忘记其原由, 索性记上一笔. TPR, FPR 首先理解TP, ...

  7. element message多次点击出现多个提示框,如何显示一个或者在同一位置显示

    /* message在同一位置弹出 */ /* reset elementUI message */ .el-message { top: 20px !important; } .el-message ...

  8. 决策树之PEP(悲观剪枝)

    引用这2篇文章 https://blog.csdn.net/taoqick/article/details/72818496 https://www.open-open.com/lib/view/op ...

  9. ROS机器人导航一 : 从英雄联盟到ROS导航

    写在前面: 这是这个系列的第一篇 本系列主要从零开始深入探索ROS(机器人操作系统)的导航和规划. 这个系列的目标,是让大家了解: 1.ROS的导航是怎么实现的 2.认识ROS里各种已有的导航算法,清 ...

  10. Java实习生常规技术面试题每日十题Java基础(八)

    目录 1.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法. 2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 3.运行时异常与受检异常有 ...