lua和c的亲密接触
介绍
基本操作
lua_State *L = luaL_newstate();//创建一个新的栈 lua_pushstring(L, "muzixiaoxin"); //把一个字符串压入栈
lua_pushnumber(L, );//把一个整型压入栈 //现在栈内有两个元素,栈底是字符串"muzixiaoxin",栈顶是整型875
//"muzixiaoxin"的索引就是1,或者-2
//855的索引就是2,或者-1 if (lua_isstring(L, )){//判断栈底的元素是不是字符串
printf("%s\n",lua_tostring(L, ));//如果是字符串就转换成字符串输出
} if (lua_isnumber(L, -)){//判断栈顶元素是不是number类型
printf("%d", lua_tonumber(L, ));//如果是就转换成number类型输出
} lua_close(L); //记得不需要的时候要释放掉
c调用lua
name = "muzixiaoxin"
version =
lua_State *L = luaL_newstate(); int err = luaL_loadfile(L, "test.lua"); //把lua文件加载成代码块,只加载不运行
if (err){
return;
} err = lua_pcall(L, , , );//运行加载的代码块
if (err){
return;
} lua_getglobal(L, "name"); //把全局变量name的值压入栈顶
printf("%s\n", lua_tostring(L, -));//取出栈顶元素打印结果为:muzixiaoxin lua_close(L); //记得不需要的时候要释放掉
lua调用c方法
//计算求和的方法
static int
sum(int a, int b){
return a + b;
}
这个方法就是求两个整型的和。我们要让lua使用这个方法,就要先把这个方法注册给lua的状态机,但注册给lua状态机的方法要求有固定的参数和固定的返回值,参数要是是一个lua虚拟栈,这个虚拟栈存放着lua传过来的参数,lua调用的返回值也要通过这个虚拟栈返回给lua,最后的返回值要求是一个int值,存着返回给lua变量的个数。我们看写好的方法:
//lua调用的方法
static int
lsum(lua_State *L){
int a = (int)lua_tonumber(L, -);//lua调用的参数之一
int b = (int)lua_tonumber(L, -);//lua调用的参数之一
lua_pushnumber(L, sum(a, b));//把计算的加过压栈
return ;//返回返回值的个数
}
下一步是吧lsum这个方法注册给lua状态机:
lua_State *L = luaL_newstate(); luaL_openlibs(L);//打开L中的所有标准库,这样就可以使用print方法 lua_register(L, "sum", lsum);//把c函数lsum注册为lua的一个全局变量sum int err = luaL_dofile(L, "test.lua"); //把lua文件加载成代码块,并运行
if (err){
return;
} lua_close(L);
test.lua的内容是:
print("1 + 2 = " .. sum(,))


lua和c的亲密接触的更多相关文章
- 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
- 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 【阿里云产品公测】与云引擎ACE第一次亲密接触
阿里云用户:林哥神话 公测当然是第一次了.这个第一次亲密接触,但话又说回来对ACE我一直都不是那感兴趣的,但是看到阿里介绍还是那般神奇,再加上200无代金券来更加给力.最后就申请了这次公测. 平时一直 ...
- Linux就是这个范儿之第一次亲密接触(3)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.4 返璞归真的命令行 有一种说法,现代计算机不是靠电力驱动,而是靠“鼠标”.多少应用程序的界面需 ...
- 与Jquery Mobile的第一次亲密接触
Jquery Mobile闻名已久,今天终于有亲密接触的机会. 通过动手写的demo,对它有了一个基本的认识: 自带的UI组件用起来简洁,方便:对旧版本的浏览器或移动设备能做到很好的优雅降级,而不影响 ...
- 我和Python的第一次亲密接触 - 零基础入门学习Python001
我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...
- 【腾讯优测干货分享】微信小程序之自动化亲密接触
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/HcPakz5CV1SHnu-U8n85pw 导语 山雨欲来风满楼,最 ...
- 亲密接触Redis-第三天(Redis的Load Balance)
前言 上两天讲述了Redis的基本搭建和基于HA的集群布署方式以及相关的策略和注意点.今天开始讲述Redis的Cluster功能,而这块目前来说网上资料不是太全,就算有1,2篇也只是单讲服务端的搭建也 ...
- Asp.Net Core与携程阿波罗(Apollo)的第一次亲密接触
一.瞎扯点什么 1.1 阿波罗 阿波罗是希腊神话中的光明之神.文艺之神,同时也是罗马神话中的太阳神:他是光明之神,从不说谎,光明磊落,在其身上找不到黑暗,也被称作真理之神.他非常聪明,通晓世事,是 ...
随机推荐
- Delphi 获取内存及CPU信息的函数
Uses MemoryCpuUtils;//首先引用该单元 //声明下列变量用来存储读取的数值 Var iTotalPhysics, iTotalVirtual, iTotalPageFile, iC ...
- python 安装与pip安装
在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装, ...
- 负载均衡软件LVS分析四(测试)
一.启动LVS集群服务LVS负载均衡管理和使用有两种方式,一种是以ipvsadm命令行脚步与ldirectord监控方式,一种是以Piranha工具进行管理和使用.下面分别介绍. 1.利用ipvsad ...
- 负载均衡软件LVS分析三(配置)
LVS集群有DR.TUN.NAT三种配置模式,可以对www服务.FTP服务.MAIL服务等做负载均衡,下面通过搭建www服务的负载均衡实例,讲述基于DR模式的LVS集群配置. 一. Director ...
- jquery 全选 全不选 事件绑定
<td width="82%" colspan="3"><input type="checkbox" id="a ...
- HDU1392(凸包)
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 私有云存储搭建(owncloud)
第一步.搭建LAMP(基于linux7.1.1503) 1 配置yum(网络加本地,下面为网络) [vault.centos.org_7.1.1503_os_x86_64_] name=added f ...
- Memcached在windows下的安装和使用
1.下载memcached安装文件及c#开发所需的dll 2.解压<memcached-1.2.6-win32-bin.zip>,并cmd,定位到解压目录. 3.安装服务:输入命令 mem ...
- ArcGIS10.2直连PostgreSQL存在问题
现象: 将下载到的libeay32.dll, libiconv-2.dll, libintl-8.dll, libpq.dll, ssleay32.dll文件拷贝到Desktop 安装目录的bin目录 ...
- 华为oj---合并数组
题目标题: 将两个整型数组按照升序合并,并且过滤掉重复数组元素 详细描述: 接口说明 原型: voidCombineBySort(int* pArray1,intiArray1Num,int* pAr ...