Lua学习笔记(4) : 调用Lua函數延伸 - 返回多个结果
2015-12-16 21:50
369 查看
以下给出一个示例,说明当需要Lua函数返回多个结果时,该如何获取栈中的结果,以及Lua脚本该如何编写
C++代码
Lua脚本
Output:
C++代码
#include "include\lua.h" #include "include\lauxlib.h" #include "include\lualib.h" #include "windows.h" void main(int argc, char* argv[]) { int ans=0, ans2=0; lua_State *pLua = luaL_newstate(); // Lua5.2后的版本遗弃lua_open(),改用luaL_newstate() if(!pLua) { printf("Failed to open Lua.\n"); return; } luaL_openlibs(pLua); // Lua5.1以上使用此函数开启库 if(luaL_dofile(pLua, "luaDemo.lua")!=0) // 执行Lua腳本,若返回0则成功 { printf("Failed to run lua.\n"); return; } lua_settop(pLua, 0); // Lua堆栈栈顶索引重置为0 lua_getglobal(pLua, "foo"); // 指定C++欲调用Lua脚本中的foo函数,此时C++程序会把foo字串推入堆栈 // 将欲传入Lua函数之参数依序推入堆栈 lua_pushnumber(pLua, 3); // num1 lua_pushnumber(pLua, 7); // num2 lua_call(pLua, 2, 2); // 调用Lua函数;这个宏的第二个参数是所指定之Lua函数的参数数量,宏的第三个参数是该函数返回值的数量 // Lua将参数及函数名依序取出堆栈,然后调用函数,并把结果依序推入堆栈 if(lua_isnumber(pLua, 1)!=0) // 判断堆栈中的值是否为我们要的数字型态的值,若返回非0则正確 { ans = (int)lua_tonumber(pLua, 1); // 取出堆栈中的函数返回值 } if(lua_isnumber(pLua, 2)!=0) // 判断堆栈中的值是否为我们要的数字型态的值,若返回非0则正確 { ans2 = (int)lua_tonumber(pLua, 2); // 取出堆栈中的函数返回值 } printf("%d %d\n", ans, ans2); lua_close(pLua); system("pause"); return; }
Lua脚本
function foo(num1, num2) return (num1 * num2), (num1 + num2) end
Output:
21 10
相关文章推荐
- Lua学习笔记(3) : 在C++中调用Lua函數
- lua 调用C的模块,直接实现sha1算法
- 基于 lua-resty-upstream-healthcheck 动态检测后端服务节点的状态
- 异常评估OGNL表达式-原标题:Exception evaluating OGNL expression
- 利用luabind从C++中传递指针到lua中,lua操作指针对象
- leetcode -- Evaluate Reverse Polish Notation -- stack的运用,有知识点
- Mac 下纯lua(三)
- 在LUA与C交互中遇到的问题
- 为什么要学习elua?
- lua 协同程序
- uLua中遇到的问题
- uLua中遇到的问题
- Lua中cJson的读写
- Lua中cJson的读写
- proto-lua-gen 转换proto文件错误 Expected top-level statement <e.g ."message">.
- luaCAPI基础部分
- Lua脚本实现界面-自定义的控制键
- 记录一个问题 lua_tinker中load_file 的lua文件包含require报错解决办法
- Mac 下纯lua(二)
- sublime搭建c++/java/lua/python/ruby的配置文件