我的一片天

我的一片天
posts - 27, comments - 12, trackbacks - 0, articles - 16
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

Lua

目前用得比较比较多的脚本
     摘要: 我们之前学习的内容都是调用lua脚本中的函数,那怎么调用主程序中的函数啊。好,我们就来谈谈。
根据教材,lua是能跟主程序进行双向的调用的,但是主程序提供给lua调用的接口函数必须按照lua的标准来定义。
这个定义格式就是
function AppFunctionApi(LL: Plua_State): Integer; cdecl;
并且要用lua的函数注册这个API,那在lua的脚本中就可以调用它了。

我们继续修改我们的test.lua脚本,如下
--test.lua
y=0
function add(x)
z=testAppApi("a1","a2","a3") --增加了主程序的Api函数,我们传入3个字符串的参数
y=y+x+z
return y
end

下面我们在主程序中准备迎接lua调用的到来。注意,lua是大小写敏感的,因此要注意大小写哦
function AppApi(vL: Plua_State): Integer; cdecl;  阅读全文

posted @ 2010-05-16 01:59 xyz 阅读(1252) | 评论 (0)  编辑 |

     摘要: 对lua的使用有初步的了解后,我们稍微增加脚本里函数的复杂元素。
根据lua的教材,lua脚本中的变量除了用local定义外,全部变量都具有全局性,我们来尝试使用全局的特性。
照旧,先修改我们的lua脚本test.lua。
-- test.lua
y=0 --初始化y,不然会提示错误的,因为y的类型未决定
function add(x)
y=y+x
return y
end


上面的脚本很简单,就是对传入的x值进行累加并返回累加后的值

好了~~,上一篇千里之始足中代码可以完全不用修改哦,运行看看。是不是发现总是返回100啊!原因是我们是在button的事件里启用lua后执行完脚本的函数就关闭了,因此我们需要把lua的指针(代码中的L)放到Private中。
private
{ Private declarations }
L: Plua_State;

为了方面我们后续的不断扩展功能,我们把初始化放到一个butto  阅读全文

posted @ 2010-05-15 23:23 xyz 阅读(2141) | 评论 (0)  编辑 |

     摘要: 经过瞎子摸象篇,我们已经对lua有了初步感受。下面就开始我们的千里之行了。
下面我们尝试调用带参数的lua脚本函数。把之前的test.lua的内容做一下变动。
--test.lua
function add(x)
x=x+100
return x
end

把传入的数加100后返回。
把button事件里的代码修改成以下的内容
var

L: Plua_State; //lua的引用类型,所有的lua方法都要用到这个

begin

L := lua_open; //建立一个lua的引用
lua_baselibopen(L); //引入lua的基础库函数
luaL_loadfile(L, 'test.lua'); //载入我们的lua脚本
lua_resume(L,0); //解析脚本到lua

lua_getglobal(L, 'add');   阅读全文

posted @ 2010-05-15 22:56 xyz 阅读(1022) | 评论 (3)  编辑 |

     摘要: 以前早就听说过lua,只是因为用不上就一直没涉及。最近考虑到可能用到,就学一学啦~
新手上路,自然是先看教材,吸取高人的经验。本人的原则是,首先要能让最简单的例程运行起来。


此教材是我学习lua的过程,希望对同样初次接触lua的人有所帮助,对于高手就一笑而过吧。

DELPHI要支持lua,先要下载lua的支持库,我是下载lua4delphi.zip来用的
把文件解压到一个目录,新建立的项目也存入这个目录.。当然你把它们放在另外的目录也可以,但是要把这个目录加到DELPHI的搜素目录里,还有把lua.dll复制到项目的目录里(必须依靠这个dll文件).

先看一个超简单lua的脚本test.lua

--注释是用双减号开始的,www.cnitblog.com/xkz
function add()
m="Yeah~~"
return m
end

上面是定义了一个lua的函数,返回m的串.我们就是要在delphi中调用这个函数来显示这个串. 阅读全文

posted @ 2010-05-15 18:57 xyz 阅读(2805) | 评论 (2)  编辑 |