脚本语言Lua与C++语言交互方法的研究_第1页
脚本语言Lua与C++语言交互方法的研究_第2页
脚本语言Lua与C++语言交互方法的研究_第3页
脚本语言Lua与C++语言交互方法的研究_第4页
脚本语言Lua与C++语言交互方法的研究_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、    脚本语言lua与c+语言交互方法的研究    赵正旭 申跃杰 左宗成摘要:当前,代价高和周期长是c+语言在开发大型程序中存在的主要问题。为了解决这一问题,提出c+语言与脚本语言lua进行交互的方法。利用lua语言小巧简单、动态灵活的特点,达到降低公司开发代价,缩短程序开发周期的目的。重点介绍了lua与c+之间传递消息的中介-lua堆栈,以及lua与c+语言之间相互调用方法。关键词: lua api;lua 脚本;lua/c+接口;lua堆栈;lua函数:tp311 :a :1009-3044(2018)23-0135-03abstract: at

2、 present, high cost and long cycle are the problems of c+ language in developing large programs. to solve this problem, it is proposed to make the interaction between c+ and scripting language lua. using the simple, dynamic and flexible features of lua language, it can reduce the development cost of

3、 the company and shorten the program development cycle. this paper focuses on the lua stack, an intermediate for data exchange between lua and c+ languages, and the method of calling each other between lua and c+.key words:lua api; lua script; lua/c+ interface; lua stack; lua function1 引言目前,軟件行业的竞争越

4、发激烈。软件开发效率作为一个影响企业竞争能力的重要因素,越来越受到行业的重视。传统的c+语言,从编写到编译到链接再到最后的运行,过程复杂。当所要开发系统规模较大时,就会出现开发效率低、成本高的问题。脚本语言lua语法简单,功能强大,易与c+语言进行交互。在利用c+语言开发程序时,嵌入lua语言,可以大大降低软件开发代价。2 lua语言的简要介绍1993年,在巴西里约热内卢天主教大学,roberto ierusalimschy、waldemar celes 和 luiz henrique de figueiredo组成的科研小组开发了脚本语言lua。设计目的是为了嵌入应用程序中,从而为应用程序提

5、供灵活的扩展和定制功能。游戏魔兽争霸的发行,让lua语言在游戏界变为新宠。游戏只是一个更容易被大多数人认识到的领域,但lua可被运用的领域不止游戏。它也可以作为独立应用脚本、web应用脚本进行开发1。随着计算机技术的发展和工业企业生产的竞争,产品的设计过程需要借助于计算机技术在虚拟环境中进行2。产品设计往往多样化,如果每一种设计都要重新开发的话,浪费人力物力。而lua灵活的扩展和定制功能,正好满足产品设计多样化的特点,为公司节省资源。这也促进了lua语言在虚拟现实技术中的推广。2.1 lua语言的优点强移植性:lua几乎可以运行在所有我们听过的操作系统上。lua不是通过使用条件编译实现平台无关

6、,而是因为lua是一种由ansi(iso)c语言编写而成的脚本语言。这意味着只要有ansi c编译器,就可以编译并使用lua。因此,lua具有极强的移植性。免费:lua是开源免费的,lua官网上(http://)可以下载lua的各个版本,最新版本为lua5.3.43。简单:lua本身小巧简单,启动速度快。lua官网上lua5.3.4源码的压缩包大小为297k4。扩展性:lua是一种易于扩展的可扩展性语言。易于扩展的意思是,lua可以使用c、c+等语言做第三方库来扩展自己的功能;扩展性语言的意思是,lua可作为第三方库来被其他语言调用,扩展其他语言的功能5。3 lua与c+

7、语言之间的交互方法lua与c/c+语言之间的通信,主要是通过一个虚拟堆栈进行。lua给c语言提供了api来对堆栈进行操作,这些api就好比两者之间通信的协议。要想理解lua与c+是如何交互的,首先就要了解lua堆栈。3.1 lua堆栈lua堆栈的使用解决了c和lua语言之间两个不协调的问题:第一,lua会自动进行垃圾收集,而c语言要求显示的分配存储单元;第二,lua中的动态类型和c中的静态类型 不一致引起的混乱6。lua的c api函数的参数中几乎都存在堆栈索引一项,如果对堆栈索引理解不清晰,对api理解将会有很大困难。堆栈的索引方式有两种,一种正数索引,一种负数索引7。如图1所示。两段代码的

8、输出结果一致,均为2008。两种索引方式有各自的优势。正数索引,不需要知道栈的大小,就能知道栈底在哪儿,栈底索引永远为1;负数索引,不需要知道栈的大小,就能知道栈顶在哪儿,栈顶索引永远为-18。当栈中元素过多,我们可以利用正数索引来操作离栈底较近的元素,利用负数索引操作离栈顶较近的元素。3.2 c+调用lua根据以上代码可以看出,当在c+中调用luaadd函数时,就会触发lua文件中的add函数。真正的求和函数是由lua语言编写。求和函数虽然简单,但是遇到复杂的函数时,就可以通过在lua中编写代码,而省去c+复杂的语法规则以及编译过程。比如我们只需要在lua文件中修改函数add,将符号“+”改

9、为“-”“*”和“/”,就可以得到求差,求积和求商函数,而省略漫长的编译过程。以luaadd(20,10)为例,四次执行结果如图3所示:由上到下分别为加减乘除操作。3.3 lua調用c+lua调用c+的方式分为三种:一是将需要的功能模块直接写入lua的源码中;二是用静态依赖的方式来实现;三是使用dll动态链接的方式。方式一适用的情况是,在c+工程中,需要用lua实现的额外功能比较单一。如果需要在lua中实现的额外功能过多,那在实际工程中,每在lua中添加一个新的功能模块,就要重新编译lua。方式三的流程是,当需要一个新的功能时,新建一个dll工程,然后在该工程里实现所需的新功能。在lua文件中

10、通过require调用生成的dll文件,调用之前需要将dll文件与lua文件放在同一目录下。在c+工程,lua调用c+以方式二为主,接下来以一个简单的求均值函数来解释方式二中lua调用c+的过程。在c+工程中,并不会像以上所述只是单方面的c+调用lua,或lua调用c+。而是c+与lua互相调用。比如在c+中有一个函数cfunction,但该函数的逻辑实现是由lua中的函数luafunction来实现。在lua中函数luafunction的功能又是由函数luafunction1、luafunction2和luafunction3组合实现。而luafunction1、luafunction2和l

11、uafunction3的功能又是通过调用在c+中的函数cfunction1、cfunction2和cfunction3来实现。在整个交互过程中,lua就好像胶水一样,利用其特性,将用c+语言制作的各种模块很轻松地联结在一起。交互过程如图5所示:4 结论lua与c+语言交互的关键之处在于两者之间的“中介”-lua堆栈。要想掌握lua与c+之间是如何交互,首先得了解两者是如何通过lua堆栈进行数据交换。掌握两者之间的交互后,即可在c+项目中嵌入lua语言。从培养程序员掌握一门新的语言所要花费的资源方面考虑,lua语言小巧简单易学习,程序员容易上手,花费的资源自然也就少。从软件开发效率以及后期版本更

12、新的难易程度方面考虑,将lua嵌入c+之后,后期修改,添加功能均可以在lua中进行,不用再重新编译c+项目。由于软件行业的竞争越发激烈,软件产品更新迭代的速度也随之加快 ,软件开发公司越加重视软件的开发效率。利用lua语言小巧、简单、易学习以及易二次编程的特点,将lua嵌入到c+工程中,可以缩短公司开发项目的时间,提高软件开发效率,提升公司竞争力。参考文献:1 杨杰. lua以总统为名的移动开发语言新贵j. 电脑与电信, 2014(4):46-48.2 赵正旭, 刘莉. freeform在虚拟产品设计中的应用研究j. 电脑知识与技术, 2013(25):5759-5764.3 the programming language lua eb/ol. http://.4 王磊. 浅析游戏脚本语言luaj. 电脑知识与技术, 2010, 6(4):899-901.5 ierusalimschy, roberto.周惟迪译, lua程序设计m. 2版.北京:电子工业出版社, 2008.6 王云泽. lua一种高效的脚本语言j. 科技广场, 2010(1):205-207.7 黄皓. vb与lua交互调用的研究与实现j. 现代计算机, 2015(20):68-72.8 roberto ierusalimschy. luiz henriq

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论