DELPHI中集成LUA脚本学习笔记2_调用LUA函数(详)
2011-05-23 18:01
766 查看
详细研究了一下主程序调用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和主程序交换数据的时候所有值都是在栈中保存的.如果在调用
Lua函数的时候出错,那LUA会将错误信息入栈,也就是-1了.
注2:lua_pcall会根据你的要求调整返回结果的个数,多余的丢弃,少的用nil补足。
在将结果入栈之前,lua_pcall会将栈内的函数和参数移除。
如果函数返回多个结果,第一个结果被第一个入栈,因此如果有n个返回结果,
第一个返回结果在栈中的位置为-n,最后一个返回结果在栈中的位置为-1。
明天再继续写LUA中用户数据的保存.(这个在我看来是很重要的,因为我暂时还没有发现LUA可以注册类函数的功能,所以只能用LUA中提供的API来保存用户数据,以便注册扩展的LUA函数间通讯).
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/steve0531/archive/2009/02/16/3894496.aspx
调用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和主程序交换数据的时候所有值都是在栈中保存的.如果在调用
Lua函数的时候出错,那LUA会将错误信息入栈,也就是-1了.
注2:lua_pcall会根据你的要求调整返回结果的个数,多余的丢弃,少的用nil补足。
在将结果入栈之前,lua_pcall会将栈内的函数和参数移除。
如果函数返回多个结果,第一个结果被第一个入栈,因此如果有n个返回结果,
第一个返回结果在栈中的位置为-n,最后一个返回结果在栈中的位置为-1。
明天再继续写LUA中用户数据的保存.(这个在我看来是很重要的,因为我暂时还没有发现LUA可以注册类函数的功能,所以只能用LUA中提供的API来保存用户数据,以便注册扩展的LUA函数间通讯).
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/steve0531/archive/2009/02/16/3894496.aspx
相关文章推荐
- DELPHI中集成LUA脚本学习笔记1_初探LUA
- Lua学习笔记(6) : 在Lua中调用C++之函数
- [LUA学习笔记03]LUA函数和C函数的相互调用
- 编译原理之学习 lua 1.1 笔记 (二) 函数调用与局部变量
- lua学习笔记 1 android 调用Lua, Lua脚本中启动Intent
- lua学习笔记 2 android调用Lua。Lua脚本中实现添加Button,并为Button增加Listener
- lua学习笔记 1 android 调用Lua, Lua脚本中启动Intent
- lua学习笔记 3 android调用Lua。Lua脚本使用LoadLib回调Java,并传多个参数
- lua学习笔记 3 android调用Lua。Lua脚本使用LoadLib回调Java,并传多个参数
- 【学习笔记】【Cocos2d-x Lua脚本开发】如何使用Lua脚本调用自定义类
- lua学习笔记 2 android调用Lua。Lua脚本中实现添加Button,并为Button增加Listener
- 通过例子学习Lua(4) -- 函数的调用 (转)
- C++学习笔记之继承层次中的函数调用。
- C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
- python学习笔记10(函数一): 函数使用、调用、返回值
- Shell脚本学习笔记(五)--函数
- 学习笔记_用 lua 脚本配合 C++ 开发
- C++学习笔记二十 - 调用后面的函数需要先声明
- Lua 调用的 C 函数保存 state 的两种方式: Storing State in C Functions 笔记
- python学习笔记--函数定义、调用与默认参数