Lua学习笔记(3) : 在C++中调用Lua函數
来源:互联网 发布:sql创建临时表 编辑:程序博客网 时间:2024/05/18 04:22
这次的教程内容和上一篇差不多,只是把获取变量换成调用函数及获取返回结果的概念,內容不多
详细说明都在代码的注释中,我就不多说了,直接看代码吧
代码沿用前一篇的架构,差別只在於新增调用函数的部分而已
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;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堆栈栈顶索引重置为0lua_getglobal(pLua, "multiply"); // 指定C++欲调用Lua脚本中的multiply函数,此时C++程序会把multiply字串推入堆栈// 将欲传入Lua函数之参数依序推入堆栈lua_pushnumber(pLua, 3); // num1lua_pushnumber(pLua, 7); // num2lua_call(pLua, 2, 1); // 调用Lua函数;这个宏的第二个参数是所指定之Lua函数的参数数量,宏的第三个参数是该函数返回值的数量// Lua将参数及函数名依序取出堆栈,然后调用函数,并把结果依序推入堆栈if(lua_isnumber(pLua, -1)!=0) // 判断堆栈顶的值是否为我们要的数字型态的值,若返回非0则正確{ans = (int)lua_tonumber(pLua, -1); // 取出堆栈栈顶的值}printf("%d\n", ans);lua_close(pLua);system("pause");return;}
Lua脚本
function multiply(num1, num2)result = num1 * num2return resultend
Output:
21
0 0
- Lua学习笔记(3) : 在C++中调用Lua函數
- Lua学习笔记二之C中调用Lua
- Lua学习笔记三之从Lua中调用C
- Lua学习笔记--C调用Lua
- Lua学习笔记--Lua调用C初探
- Lua 在Lua中调用C函数
- [LUA学习笔记02]在C中通过LUA API访问LUA脚本变量
- Ubuntu下安装Lua以及在C中调用Lua
- Lua 在C程序中调用Lua函数
- Lua学习笔记(一) vs2013如何在C++中调用Lua
- Lua学习笔记(一) vs2013如何在C++中调用Lua(修正版)
- Lua学习笔记(6) : 在Lua中调用C++之函数
- 在Lua中调用C函数
- 在C中调用Lua代码
- lua中调用C
- LUA中调用C
- Lua学习笔记二--在Lua中使用自己的C函数
- Lua学习笔记二--在Lua中使用自己的C函数收藏
- 【Linux】对比直接编译进内核和模块形式
- SpannableString、ClickableSpan
- thinkphp3.2.3 相关
- logback 配置
- Labwindows/CVI程序调用C#生成的Dll文件
- Lua学习笔记(3) : 在C++中调用Lua函數
- Wireshark 网络抓包工具介绍、应用及一个案例
- udp组播试验-C语言
- SpannableString中的LinkMovementMethod和ClickableSpan的实现安卓可点击有颜色文字使用
- Android Studio for Ubuntu 14.04 无法输入中文解决办法
- socket传输文件例子
- n皇后问题--拉斯维加斯
- 【颜色空间】CLElab颜色空间
- 黑马程序员——Eclipse快捷键总结