DELPHI中集成LUA脚本学习笔记2_调用LUA函数(详)

本文详细探讨了如何在DELPHI中调用LUA脚本的函数,通过lua_getglobal和lua_pcall等API实现参数传递和错误处理。还介绍了LUA在栈中保存和返回结果的机制,并预告了关于LUA中用户数据保存的内容。
摘要由CSDN通过智能技术生成

详细研究了一下主程序调用LUA函数的细微过程,顺便写一点心得
调用LUA函数


function add(x, y)
 return x+y
end


在已经打开LUA库并装载了脚本后主程序使用以下方法调用


lua_getglobal(L, "add");//压入被调用的LUA中函数名add
lua_pushnumber(L, x); //压入add的第1个参数
lua_pushnumber(L, y); //压入add的第2个参数

然后使用lua_pcall来调用

if (lua_pcall(L, 2, 1, 0) <> 0) then
begin
 showmessage(format('错误 f: %s',[lua_tostring(L, -1)]);
end;

上面这个IF是判断lua_pcall调用是否正确,在正确情况下lua_pcall会返回0,
如果出错会返回错误信息lua_tostring(L, -1){错误信息会保存在这里}

当然你还可以用lua的api来判断返回变量类型,来做数据检查.

if not lua_isnumber(L,-1) then
 showmessage('返回数据不是数字!!');

在没有错误后,lua_tonumber(L, -1)的值就是LUA中add函数返回的内容了.

c := lua_tonumber(L, -1);
//最后使用
lua_pop(L, 1);  //出栈,压入几个就出几个,参数2

 

注:细心的朋友会发现在lua_pcall调用后出错的错误信息lua_tostring(L, -1)
和add函数返回的结果lua_tonumber(L, -1) 是一样的"-1".为什么会这样呢?
原因在于LUA和主程序交换数据的时候所有值都是在栈中保存的.如果在调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值