Lua与C交换】的更多相关文章

编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj luac.o ren print.obj print.o link /DLL /IMPLIB:lua5.1.lib /OUT:lua5.1.dll *.obj link /OUT:lua.exe lua.o lua5.1.lib lib /out:lua5.1-static.lib *.obj li…
1.C调用Lua函数 (1) 首先要进行Lua的初始化,这个主要是lua_open和luaL_openlibs函数 (2)然后是解析并编译lua的代码,这个主要是luaL_dofile函数  (3) 解析好之后使用lua_getglobal指明要调用的lua函数 (4) 如果有lua函数的参数,通过使用lua_pushstring函数传递参数 (5) 最后调用lua_pcall进行lua函数的调用    (6) 调用完成之后采用lua_tonumber类函数可以获取到函数的返回结果 2.Lua调…
[那不是真的多线程] Lua不支持真正的多线程,这句话我在<Lua中的协同程序>这篇文章中就已经说了.根据我的编程经验,在开发过程中,如果可以避免使用线程,那就坚决不用线程,如果实在没有更好的办法,那就只能退而用之.为什么?首先,多个线程之间的通信比较麻烦,同时,线程之间共享内存,对于共享资源的访问,使用都是一个不好控制的问题:其次,线程之间来回切换,也会导致一些不可预估的问题,对性能也是一种损耗.Lua不支持真正的多线程,而是一种协作式的多线程,彼此之间协作完成,并不是抢占完成任务,由于这种…
tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode() print(tolua.type(node)) -- 输出 CCNode ~~ tolua.cast 强制转换对象类型.用途请參考 CCArray. 格式: tolua.cast(对象, 类型名称) ~~ tolua.isnull 检查指定 Lua 值中保存的 C++ 对象是否已经被删除. 我们…
之前在<C/C++和Lua是如何进行通信的?>一文中简单的介绍了lua与宿主之间的通信.简单的说两种不同的语言之间数据类型不一样又如何进行数据交换呢?那就是lua_State虚拟栈,通过栈操作和lua库函数,我们很轻松就能完成两者之间的数据交换. 开始之前,明确几个问题,lua中的虚拟栈的索引编号问题(我们假设栈大小为n),编号1是栈底,n视栈顶,编号-1是栈顶,-n是栈底.lua中的库函数需要访问和操作栈上的数据都是通过索引编号定位的.但是我们需要明确一点,有些API并没有使用索引编号作为参…
协同程序与线程thread差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和命令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行.也就是说多个协同程序在任意时刻只能运行一个协同程序,只有当正在运行的协同程序显式的要求挂起时,它的执行才会暂停.   一.协同程序coroutine        Lua将所有关于协同程序的函数放置在一个名为“coroutine”的table…
协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程. 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适. 线程和协同程序的主要不同在于:在多处理器情况下,多线程程序同时运行多个线程:而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起.这样Lua的协程就不能利用现在多核技术了. (一)Cor…
考虑使用已经有的dll,要写wrapper,使得在lua中能调用dll里的函数,嗯,参考<Programming in lua>,然后仿写luars232. 一.函数定义 先分析一个函数的写法,其它函数类似: /* * error, written_len = port:write(data [, timeout_ms]) */ static int lua_port_write(lua_State *L) { ; ; unsigned ; unsigned ; size_t len = ;…
尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能. lua最让人惊喜的地方应该是它的执行速度,目前没有任何一个项目因为lua的使用而造成瓶颈.lua的内核小于120KB,Python的内核大约860KB,Perl的内核大约1.1MB,lua通常比python运行更快速. 单行注释: -- 多行注释: --[[ 注释内容 ]] 交换变量: a,b = b,a 不等于:~= 在默认情况下,变量总是认为是全局…
Lua简介 Lua是一种简单.可拓展.可移植及高效的脚本语言. 开始 Lua之间不需要分隔符 运行方式: Linux下: lua -i prog dofile("lib1.lua") 函数定义: function func() return 123; end 词法规范 标识符可以以任意字母.数字.下划线构成,但是不能以数字开头,避免下划线后面跟一个或多个大写字母,这类字符被Lua保留作为特殊用途.保留字有:and.break.do.else.elseif.end.false.for.f…
环境:lua for windows (lfW)主页:http://luaforwindows.luaforge.net/https://code.google.com/p/luaforwindows/lua for windows其实是一整套Lua的开发环境,它包括:Lua Interpreter(Lua解释器)Lua Reference Manual(Lua参考手册) Quick Lua Tour (Lua快速入门)Examples (Lua范例)Libraries with documen…
在Lua中,一切都是变量,除了关键字.TTMD强大了. 1.注释 -- 表示注释一行 --[[ ]]表示注释一段代码,相当于C语言的/*....*/ 注意:[[ ... ]]表示一段字符串 2.lua编程 先从最简单的来了解lua吧 print("Hello Lua") --打印结果:Hello Lua 在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开.一般来说,如果多个语句写在同一行的话,建议总是用分号隔开. a.控制语句 Lua 有好几种程序控制语句,…
1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Redis下载地址:wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.安装依赖包 yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl…
Rings需求 如果有一段lua脚本代码, 本来来源不可靠, 可能有安全性问题, 或者不像让这份代码污染了正在执行的lua环境, 则需要lua rings工具出厂了. 其在主lua环境中,即在宿主脚本中, 调用rings库创建一个子的lua环境, 将不可靠的lua代码在子lua环境中运行, 运行完毕环境销毁, 一点都不影响宿主环境. Rings is a library which provides a way to create new Lua states from within Lua.…
最近对Lua很感兴趣,以下是本阶段学习的总结,包含三部分,一部分是基础语法,一部分是扩展和解释器嵌入,最后一部分是Lua小练习. 知识涉及:Lua语言编程基础:Lua&C++:Lua扩展.嵌入Lua解释器.裸写C++扩展.借助swig写C++扩展.平台:Linux.gcc4.8.2 一.基础语法 1.print("Hello World") Lua中不需要分号,也不需要python那样的严格格式: 单引号跟双引号等价,多行文本使用两个中括号扩起来:[[multi line]]:…
Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes 云风 译 www.codingnow.com Copyright © 2006 Lua.org, PUC-Rio. All rights reserved. 1 - 介绍 Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施. Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持.…
导出 C/C++ API 给 Lua 使用   cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua++ 工具,将大量的 C/C++ API 导出到了 Lua 中. 使用 tolua++ 的基本步骤: 从 C/C++ 源代码复制头文件的内容到 .tolua(tolua++ 文档中称为 .pkg)文件中. 修改 .tolua 文件内容,去掉 tolua++ 无法识别的内容,以及不需要导出到 Lua…
Lua可作为扩展性语言(Lua可以作为程序库用来扩展应用的功能),同时也是个可扩展的语言(Lua程序中可以注册由其他语言实现的函数). C和Lua交互的部分称为C API.C API是一个C代码与Lua进行交互的函数集.他由以下部分组成:读写Lua全局变量的函数.调用Lua函数的函数.运行Lua代码片断的函数.注册C函数然后可以在Lua中被调用的函数,等等. API中有些函数为了方便以宏的方式实现. 当在Lua和C之间交换数据时我们面临着两个问题:动态与静态类型系统的不匹配和自动与手动内存管理的…
Lua中的协程和多线程很相似,每一个协程有自己的堆栈,自己的局部变量,可以通过yield-resume实现在协程间的切换.不同之处是:Lua协程是非抢占式的多线程,必须手动在不同的协程间切换,且同一时刻只能有一个协程在运行.并且Lua中的协程无法在外部将其停止,而且有可能导致程序阻塞. 协同程序(Coroutine): 三个状态:suspended(挂起,协同刚创建完成时或者yield之后).running(运行).dead(函数走完后的状态,这时候不能再重新resume). coroutine…
局部定义与代码块: 使用local声明一个局部变量或局部函数,局部对象只在被声明的那个代码块中有效. 代码块:一个控制结构.一个函数体.一个chunk(一个文件或文本串)(Lua把chunk当做函数处理) 这样,可以在chunk内部声明局部函数,该函数仅在chunk内可见,并且词法定界保证了包内其他函数可以调用此函数.  在chunk内部定义多个local function并且相互调用(或定义local递归调用函数)时,最好先声明,再定义. 应该尽可能的使用局部变量(使用关键词local声明的变…
今天开始学习Lua,下面把一些重点记下来: 单行注释-- ,多行注释 --[[  .......  --]] Lua中false和nil表示条件判断的假,其余的,包括空字符串,0,都表示真. Lua没有整数,都是浮点数 字符串 Lua字符串不能直接修改,字符串可以用单引号或者双引号引住,反斜杠转义 字符串转数字 print("10" + 1 ) 输出11,而不是输出101(不是数字转字符串) 字符串连接用.. 符号. print(10 . 20) 输出1020,数字先转成字符串,再连接…
转自:http://foredoomed.org/blog/2013/12/07/integrate-c-with-lua/ 我们在用C写程序的时候,很多情况下需要用到List,Map等集合,但是C是不原生支持这些数据结构的.碰到这种情况的话,要么自己实现一套API,要么就用别人写好的现成的类库.但是大多数情况下现有类库的API使用起来非常不舒服,自己写呢又重复造轮子,那有没有其他的办法呢?答案是肯定的.我们可以用Lua这个嵌入式脚本语言与C搭配使用,来弥补C这个古老语言的很多先天性的不足. 0…
在这篇文章中,我想向大家介绍如何进行Lua程序设计.我假设大家都学过至少一门编程语言,比如Basic或C,特别是C.因为Lua的最大用途是在宿主程序中作为脚本使用的. Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 在Lua中,一切都是变量,除了关键字.请记住这句话. I. 首先是注释 写一个程序,总是少不了注释的. 在Lua中,你可以使用单行注释和多行注释. 单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止.相当于C++语言中的"//&quo…
据说lua的效率高,公司要求,路过学习下.哎 安装 需要最新版的Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件. 安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJIT. shell> wget http://luajit.org/download/LuaJIT-<VERSION>.tar.gz shell> tar zxvf LuaJIT-<VERSION>.tar.gz shell> cd LuaJIT-…
1.lua中的标识符可以是由任意字母.数字和下划线构成的字符串,但不能以数字开头.2.lua将通常类似"_VALUE"的标识符作为保留标识符3.lua的保留字 and break do else elseif end false for function if in loacl nil not or repear return then true until while 有大小写之分 4.行注释-- 块注释--[[ …… ]]==============================…
The first time use Lua for programing Wang Xiao 1. 关于 lua 的变量类型:  lua 变量的定义与matlab有点不同: local d , f = 5 ,10 --声明局部变量 d,f. d , f = 5, 10;  --声明全局变量 d,f. d, f = 10        --[[声明全局变量 d,f,其中 f 的值是 nil--]]  如果只是定义没有初始化,则静态存储变量被隐式初始化为 nil. Lua 赋值时会将第一个值赋给第…
Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 在Lua中,一切都是变量,除了关键字.请记住这句话. I. 首先是注释 写一个程序,总是少不了注释的. 在Lua中,你可以使用单行注释和多行注释. 单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止.相当于C++语言中的"//". 多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止.这种注释相当于C语言中的"/*…*/&qu…
作者: 沐枫 (第二人生成员) 原文地址:http://job.17173.com/content/2009-01-22/20090122143452606,1.shtml 在这篇文章中,我想向大家介绍如何进行Lua程序设计.我假设大家都学过至少一门编程语言,比如Basic或C,特别是C.因为Lua的最大用途是在宿主程序中作为脚本使用的. Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 在Lua中,一切都是变量,除了关键字.请记住这句话. 前言.开发环境搭建 Lua编辑器: Scr…
感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.html<Cocos2d-x实战 Lua卷>源码及样章下载地址:源码下载地址: http://51work6.com/forum.php?mod=viewthread&tid=1198&extra=page%3D1样章下载地址:http://pan.baidu.com/s/1i3fNS&…
Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.org/manual/5.1/manual.html#2.1 关于分号 语句的最后可以用分号";"表示结束,也可以不写. 而对于一行有多个语句的情况下,语句之间可以用分号";"隔开,也可以用空白隔开.一般来说,建议总是用分号隔开. 使用注释 单行注释使用“--”即可,以后的…