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 阿波罗 阿波罗是希腊神话中的光明之神.文艺之神,同时也是罗马神话中的太阳神:他是光明之神,从不说谎,光明磊落,在其身上找不到黑暗,也被称作真理之神.他非常聪明,通晓世事,是 ...
随机推荐
- 在官网下载了最新版的PHP,解压后的安装包里为什么没有php5isapi.dll这个dll文件?
因为自PHP 5.3.1版本开始,PHP便已不在支持ISAPI模式,所以你在PHP5.3.1版本以上的php目录中看不到php5isapi.dll文件. 那么,IIS6下跑PHP 5.3.1以上版本时 ...
- centos下修改hostname,ip,netmask,gateway,dns
http://itlab.idcquan.com/linux/set/917191.html http://jingyan.baidu.com/article/e4d08ffdd417660fd3f6 ...
- CSS3-----图片翻页效果的展示
在开发一个网站的过程中各种翻页效果数不胜数,在这里我将介绍一下简单的一种方法就是使用css3的旋转即可实现这种常见的效果: 显示效果如下: 首先是页面的布局,不用那么复杂; a标签的href属性,一般 ...
- 以Tomcat+Mysql为例,实现Docker多容器连接
Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问. 但网络端口映射方式并不是Docker中连接多个容 ...
- RxJava2出现:Unable to create call adapter for io.reactivex.Flowable
前面一直使用的是Rxjava 1.x 版本,最近 Rxjava 2.x 版本发布了,并且支持了背压,便换成了 Rxjava 2.x 版本.更换之后出现了下面的错误. Caused by: java.l ...
- Struts2的概述和入门
忽如一夜春风来,千树万树梨花开 上节我们说到,JAVAEE的三层架构,即web层,service层,dao层.hibernate是应用在dao层的.而我们现在所学的Struts2是应用在web层.St ...
- 【翻译】理解Joomla!模板
最近在摸索Joomla的模板开发,看文档的时候心血来潮就干脆把这篇翻译过来,第一次翻译技术文档,肯定有很多错误,希望大家多多批评指正. 原文地址:https://docs.joomla.org/Und ...
- 微端游戏启动器LAUNCHER的制作之MFC版一(序和进程通信)
额...刚开始信誓旦旦说要写launcher制作的博客,还没写完就被抛到脑后了真是没毅力.最近把之前写的wpf的launcher改成了mfc版,遇到很多问题,写了三个星期才写完,好好记录一下吧.我也想 ...
- Git中.gitignore文件的使用
在我们使用git的时候,有时候就不想传一些与代码无关的文件到远程仓库中,比如说编译后的文件,.gitignore就可以帮助我们处理这些文件. 生成.gitignore文件 在git bash中使用 ...
- angular ng-repeat数组中的数组
//先定义一个数组anular代码: var app = angular.module('serApp', []); app.controller('indexCtrl', function($sco ...