DELPHI中集成LUA脚本学习笔记1_初探LUA

 

序:记得在刚开始学编程的时候,知道了一个字符串并不是一定要在程序中固定死的,而是可以用TEdit.Text来连接的,于是有了一个想法,把一整段代码(几个函数)放在Memo中,想在程序运行的时候通过修改Memo中的内容而让程序能灵活使用.可惜后来失败了.大家看到这一定会笑的半死.的确这是一个很幼稚的想法.后来知道用脚本可以实现程序的灵活运行,可惜一直没有时间研究,这几天刚好要用到脚本,所以研究了一下午,顺便写一点心得.

Python,LUA等都不错,我选择了LUA原因是连接库比较小,扩展方便而Python太庞大了.wow就是使用LUA做为引擎.LUA本是C/C++的连接库,网上有pas的dll连接单元.我是用Delphi来集成的.

LUA的语法类似C,在网上可以找到.具体的使用方法可以见 云风大侠的翻译的手册
http://www.codingnow.com/2000/download/lua_manual.html
脚本示例:

nNum = Num()
function Add(number)
 number = number + nNum
 return number
end


以上是一个简单的LUA脚本,其中有一个变量nNum和一个函数Add.函数Add的功能是将传入的number+nNum然后返回.nNum的值为调用主程序中的Num函数获得.
LUA要集成到程序中,最基本的要知道一下几点.
1.脚本加载执行.
2.主程序调用脚本中函数.
3.脚本调用主程序函数
4.主程序于脚本变量相互获取

我写了一个简单的类代码如下: 

特别注意的是脚本中调用主程序函数时,返回参数的设置,程序中默认返回result在脚本引擎中会认为是返回参数的数量,并不是具体的值,而值要先压入栈中才可以.
lua_pushnumber(l,30);  //返回值30压栈
result := 1; 

脚本加载运行时还可以用lua_dofile(l,FileName).上面的代码我用的是luaL_loadfile和lua_resume来配合.
因为我想让多个类实例来执行不同的脚本.而lua_dofile加载后会直接运行,而luaL_loadfile只是读取脚本到内存并不直接运行.要是运行的时候用lua_resume就可以了.

脚本运行时,是运行非函数外所以代码.函数只有在主程序或脚本函数外掉用的时候才会执行.

LUA 中变量都为全局变量,使用的时候不需要定义.而且要学习LUA的时候要了解汇编,因为函数的返回等都是在栈中保存的. 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
近期因为需要,学习了一下LUA脚本语言,由于开发环境使用Delphi,所以学习侧重于DelphiLua脚本的使用。 虽然学习Delphi已经多年,但从未接触过Lua,通过网上搜索,这方面的资料也非常少,即便是找到了几篇帖子,不是泛泛而谈,就是语言表达模糊,难于理解。 为此笔者(游标)通过在网上的找到的一则(共四篇)学习笔记,经过一次次失败,算是初入Lua的大门。 原帖地址:http://www.cnitblog.com/xkz/category/8679.html【向作者表示感谢】 在此将自己根据帖子做的实例发给大家,避免大家再走弯路。 实例在原帖子的基础上,有所扩展,详细对于刚学Lua的新手有所帮助。至于高手,就一笑而过吧。 几点注意事项: 1、帖子所说的lua, lualib, lauxlib, LuaUtils几个单元文件,不仅需要和工程文件在同一文件夹下,而且要添加到工程,并在工程引用。同时,引用的位置最好在头部的Uses,否则那个关于累加的例子会出错。 2、Lua.dll需要放在工程。 3、原帖省略了很多代码(或者说是表达上省略了),给初学者的理解造成了很多误区。在我的实例都给出了完整代码。 最后对CSDN上发源码的朋友说一句,发源码希望不要糊弄了事,注释多一些,说明详细些,重复的、完全是糊弄人的源码少发些。大家时间都很宝贵,下载积分也来之不易。浪费在无意义的下载上,实在心疼。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值