文档章节

深入lua栈交互—cpp调用lua数据

梦想游戏人
 梦想游戏人
发布于 2015/10/16 21:49
字数 470
阅读 209
收藏 1
点赞 0
评论 0

用原生API来交互

lua是通过lua_state这个栈来和c 交互的

1.....lua栈 index 下往上增长 如: 1 2 3 4 5 6
2.....lua栈 index 是循环的 如下 index 上到下 是 3 2 1 0 -1 -2 -3 ,栈对应的值为
    1
    2
    3
    x
    1
    2
    3
    
3......lua函数多个返回值如果上面是function返回了3个返回值,那么return a ,b,c  中 a=3 b=2 c=1 第一个返回值先入栈

栈pop问题:lua_pop(x) ;x 为 pop的个数 ,一般调用函数后 pop(1) 因为一般返回值只有一个

ps:调用函数的时候 不会堆栈平衡,返回时已经平衡了,值需要对返回的值  占用的栈清理

 

 

 

c++使用lua的数据 例子

extern "C"{
#include "src/lualib.h"
#include "src/lauxlib.h"
#include "src/lua.h"

}

#include "iostream"
using namespace std;

lua_State*l;


int get_sum(int x, int y)
{
	int sum=0;

	lua_getglobal(l, "get_sum");/*调用函数*/

	lua_pushnumber(l, x);
	lua_pushnumber(l, y);
 
	lua_call(l, 2, 3);/*参数2个,返回值3个*/

	cout << "top is  " << lua_gettop(l) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 0) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 1) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 2) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 2) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 3) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 4) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 5) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 6) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 7) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 8) << endl;
	cout << lua_tonumber(l, lua_gettop(l) - 9) << endl;


	lua_pop(l, 3);/*function返回了3个值*/


	cout << "\n\n" << endl;

	lua_getglobal(l, "b");/*获取变量 压入栈中*/
	cout <<"b=" <<lua_tonumber(l, lua_gettop(l)/*1*/ ) << endl;

	lua_getglobal(l, "a");/*获取变量 压入栈中*/
	cout << "a=" << lua_tonumber(l, lua_gettop(l)/*1*/) << endl;

	lua_getglobal(l, "c");/*获取变量 压入栈中*/
	cout << "c=" << lua_tonumber(l, lua_gettop(l)/*1*/) << endl;

	lua_pop(l, 3);/*清除栈*/
	cout << "top is" << lua_gettop(l) << endl;


	return sum;
}





int main()
{
	l = lua_open();

	luaL_openlibs(l);


	luaL_dofile(l, "a.lua");

	//cout << get_sum(1, 2) << endl;

	get_sum(1, 2);

	lua_close(l);

	system("pause");
	return 0;
}

 

 

a=10;

b=11;

c=12;

 

function get_sum(arg_1,arg_2)

return arg_1+arg_2,"100","200";

end

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 412
码字总数 116555
作品 0
成都
用LuaBridge为Lua绑定C/C++对象

最近为了总结Lua绑定C/C++对象的各种方法、第三方库和原理,学习了LuaBridge库为Lua绑定C/C++对象,下面是学习笔记,实质是对该库的Reference Manual基本上翻译了一遍,学习过程中测试代码,...

shezjl
2015/10/26
0
0
C/C++和Lua是如何进行通信的?

为了实现Lua和其他语言之间的通信,Lua虚拟机为C/C++提供了两个特性: 一,LuaState状态机 luaState主要是管理一个lua虚拟机的执行环境, 一个lua虚拟机可以有多个执行环境。Lua虚拟机通过维护...

borey
2014/09/17
0
10
cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题

最近一直在忙着改前端的东西,当然也遇到了一些问题,所以记录一下 cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题 在cocos2dx 3.0 中提供了新的c/c++函数导出到lua使用的工具,...

pigsoldier
2014/05/17
0
5
luabind 0.9.1版本尝试

luabind 0.9.1版本尝试 http://www.rasterbar.com/products/luabind 1. 编译luabind 0.9.1 linux版本 编译luabind需要bjam binary。 直接copy boost/1.37.0目录中编译好的bjam binary到~/bin......

zero-li
2014/01/14
0
0
(转)LUA与python根本就不具有可比性

网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有...

Yisen
2011/06/27
0
3
Cocos2d-x中关于lua的坑

上周在项目开发中遇到一个奇怪的问题,某个c++模块解压完的字节流数据传递给lua后,lua在做基于字节流的反序列化时始终出错,刚开始以为是不是c++模块读取出来的字节流有问题,但是debug发现,c+...

pigsoldier
2014/07/06
0
0
分享使用Lua设计基于组件的游戏架构的经验

作者:Wei Ciao Jheng 在成为iOS开发者以前,我是一家制作MMO的公司的游戏程序员。我最擅长也最喜欢的编程语言是C++和Lua。作为游戏开发者,我曾经深入挖掘Lua的潜力,并用它制作了一个游戏框...

ChildhoodAndy
2013/07/05
0
0
[架构设计]反向(或者后向)插件系统设计

反向(或者后向)插件系统与正向(或者前向)插件系统是一对概念相对的设计模式。正向插件系统是指系统架构的时候预先定义好一系列用于某种特定目的的函数族,然后通过共享库的形式封装不同的...

梁欢
2014/06/25
0
0
ngx lua模块源码简单解析

ngx lua模块源码简单解析分类: nginx 2014-07-11 11:45 2097人阅读 评论(0) 收藏 举报nginxlua数据结构架构目录(?)[+]对nginx lua模块的整个流程,原理简单解析。由于nginx lua模块相关配置...

epiclight
2015/06/03
0
0
Windows平台下C/C++和Lua的相互调用

Lua for Windows 开始学习Lua编程 Windows平台下的C++调用Lua tolua++ 1.0.93集成C/C++和Lua代码的工具 tolua++ - Reference Manual...

klaus丶
2014/05/19
0
5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部