我的一片天

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

Lua新手上路之来而不往非礼也(DELPHI)

Posted on 2010-05-16 01:59 xyz 阅读(1255) 评论(0)  编辑 收藏 引用 所属分类: 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;
var
    I, N: Integer;
begin
    N := lua_gettop(vL);    //N=获取的函数参数总数目,看教材关于获取参数数量的说明
    for I := 1 to N do
        ShowMessage(lua_tostring(vL, I)); //我们把传入的参数显示出来
    lua_pushnumber(vL,3);   //返回参数3给脚本是通过类似于我们设置调用脚本函数的参数的方法
    result:= 1;   //返回1个参数给lua脚本
end;


准备好API后,还需要把这个API注册到lua中,lua可不会先知先觉。
我们修改载入脚本后的初始化部分。
procedure TForm1.Button2Click(Sender: TObject);
begin
  luaL_loadfile(L, 'test.lua');  //载入lua脚本
  lua_resume(L,0);              //解析脚本到lua
  Lua_Register(L, 'testAppApi', AppApi);    // 注册啦~~,把lua脚本中可以用api名和主程序中定义的函数关联起来。www.cnitblog.com/xkz
end;

好,一切准备就绪,测试一下我们的成果,点击button2.
调用后,lua的脚本会调用api,弹出3次消息框列出我们传入的参数

到此~~lua的新手上路就完成了。剩下的就是多多阅读教材,和学习其他人的高阶应用经验了。


只有注册用户登录后才能发表评论。