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 阿波罗 阿波罗是希腊神话中的光明之神.文艺之神,同时也是罗马神话中的太阳神:他是光明之神,从不说谎,光明磊落,在其身上找不到黑暗,也被称作真理之神.他非常聪明,通晓世事,是 ...
随机推荐
- MySQL5.6自动化部署(二进制)
###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可############### ######数据库目录/usr/local/mysql####### ...
- Spring mvc配置Json返回
第一种 配置 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHand ...
- C# Linq to sql 实现 group by 统计多字段 返回多字段
Linq to sql 使用group by 统计多个字段,然后返回多个字段的值,话不多说,直接上例子: where u.fy_no == fy_no orderby u.we_no group u ...
- jdbc数据连接池dbcp要导入的jar包
jdbc数据连接池dbcp要导入的jar包 只用导入commons-dbcp-x.y.z.jarcommons-pool-a.b.jar
- Mybatis拦截器实现分页
本文介绍使用Mybatis拦截器,实现分页:并且在dao层,直接返回自定义的分页对象. 最终dao层结果: public interface ModelMapper { Page<Model&g ...
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...
- netty 对 protobuf 协议的解码与包装探究(2)
netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...
- 《JAVASCRIPT高级程序设计》选择框脚本和富文本编辑
一.选择框脚本 选择框也是表单的一个字段,是通过<select>和<option>元素来创建的,需要使用javascript来控制.选择框拥有以下的属性和方法: 以下介绍一些选 ...
- Myeclipse插件将wsdl生成java客户端代码
一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new-&g ...
- Extjs学习笔记之九 数据模型(上)-extjs
来源:niutuku.com | vincent上传于2012-07-20 | 1802次浏览 | 0条评论 本文开始进入Extjs最核心最优秀的部分. 标签:Extjs 数据模型 Extjs的数 ...