Posted on 2010-05-16 01:59
xyz 阅读(1252)
评论(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/xkzend;
好,一切准备就绪,测试一下我们的成果,点击button2.
调用后,lua的脚本会调用api,弹出3次消息框列出我们传入的参数
到此~~lua的新手上路就完成了。剩下的就是多多阅读教材,和学习其他人的高阶应用经验了。