c++调用lua文件
1.Lua文件
function func()print("aaaaaa")
endfunc()width=800
height=600background={r=1,g=0,b=0}function f(x,y)return x+y
end
2.c++文件
#include <iostream>
#include <lua.hpp>
#include <lualib.h>
#include <lauxlib.h>
#include <limits.h>using namespace std;#pragma comment(lib,"lualib.lib")void load(lua_State*L,const char*fname,int* w,int*h)
{//加载文件if (LUA_OK == luaL_loadfile(L, fname))if (LUA_OK!=lua_pcall(L, 0, 0, 0))//运行Lua文件luaL_error(L, "不能运行配置.文件: %s", lua_tostring(L, -1));//获取全局变量lua_getglobal(L, "width");lua_getglobal(L, "height");if (0==lua_isnumber(L,-2))luaL_error(L, "'width'不是一个数字\n");if (0== lua_isnumber(L, -1))luaL_error(L, "'height'不是一个数字\n");*w = lua_tointeger(L, -2);*h = lua_tointeger(L, -1);
}//获取table中的值
int getfield(lua_State*L,const char*key)
{float result;lua_getfield(L, -1, key); //获取background[key]if (0==lua_isnumber(L, -1))luaL_error(L, "获取失败");result = (float)lua_tonumber(L, -1) * 255;lua_pop(L, 1); //删除数字return result;
}//设置table 的值struct ColorTable
{char* name;unsigned char red, gree, blue;
}colortable[]{{"WHITE",255,255,255},{"RED",255,0,0},{NULL,0,0,0} //结尾
};void setfield(lua_State*L,const char*index,int value)
{lua_pushnumber(L, (double)value / 255);lua_setfield(L, -2, index);
}void setcolor(lua_State*L, struct ColorTable*ct)
{lua_newtable(L);setfield(L, "r", ct->red);//table.r=ct->rsetfield(L, "g", ct->gree);setfield(L, "b", ct->blue);lua_setglobal(L, ct->name); //'name'=table
}//调用lua中的函数
int f(lua_State*L,int x, int y)
{int z;//压入函数和参数lua_getglobal(L, "f"); //待调用的函数lua_pushnumber(L, x); //压入第一个参数lua_pushnumber(L, y); //第二个参数//完成调用(2个参数,1个结果)if (lua_pcall(L, 2, 1, 0) != 0)luaL_error(L, "错误%s",lua_tostring(L,-1));//检索结果if (0==lua_isnumber(L,-1))luaL_error(L, "不是数字");z = lua_tonumber(L, -1); lua_pop(L, 1);//弹出返回值return z;
}int main()
{lua_State*L=luaL_newstate();luaL_openlibs(L);int width = 0, height = 0;load(L, "C:\\Users\\Administrator\\Desktop\\1.lua", &width, &height);cout << width<<" "<<height<<endl;//获取table中的值lua_getglobal(L, "background");if (0==lua_istable(L, -1))luaL_error(L, "background不是table");int red =getfield(L,"r");int gree = getfield(L, "g");int blue = getfield(L, "b");cout << red << " " << gree << " " << blue << endl;//清空栈lua_settop(L, 0);//设置table的值int i = 0;while (colortable[i].name != NULL)setcolor(L, &colortable[i++]);lua_getglobal(L, "WHITE");if (0==lua_istable(L, -1))luaL_error(L, "background不是table");red = getfield(L, "r");gree = getfield(L, "g");blue = getfield(L, "b");cout << red << " " << gree << " " << blue << endl;//调用lua自定义函数int z = 0;z = f(L, 5, 1);cout << z << endl;system("pause");return 0;
}
c++调用lua文件相关推荐
- C++调用Lua出现 unproteted error in call to Lua API错误的发现过程与解决方法
用C++调用Lua时,无论怎么调,都发现程序在调用PCall的时候会触发这个错误 这里记录下自己的发现过程: 在pcall之前打印了下 lua_tonumber 取出来的内容,发现没有压进去,考虑文件 ...
- 使用ToLua插件 关于Lua脚本中 require 添加模块经常报错找不到Lua文件的问题
Lua的require添加模块经常报错,找不到 LuaException: E:/UnityProJect/Calculator/Assets/Script/Lua/NpcManage.lua:4: ...
- Nginx+lua 实现调用.so文件方法
本文给大家分享的是Nginx结合lua 实现调用.so动态链接库文件的方法和示例,有需要的小伙伴可以参考下 最近在和智能硬件部门一起,做一个室内定位的服务,该服务根据手机端传过来的beacon设备列表 ...
- 脚本语言lua笔记(5)c++调用lua
首先搭建环境,使用vs2010的c++开发工具,lua源码包,可以去官方下载最新源码包,我采用的是lua-5.1.5的版本.好了,开始配环境. 第一步: 下载源码包后,解压lua-5.1.5源码包到硬 ...
- 留念,第一次在C中调用lua成功!
反反复复学lua N多次了,这次终于在C中调用lua成功了!一大进步啊! 记录下过程: 1.找到代码如下: //add.c #include <stdio.h> #inclu ...
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...
- Lua 文件 I/O
Lua I/O 库用于读取和处理文件.分为简单模式(和C一样).完全模式. 简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作. 完全模式(co ...
- cocos2dx java 调用lua_cocos2dx之C++调用Lua
1.引入头文件 #include "cocos2d.h" #include "CCLuaEngine.h" USING_NS_CC; using namespa ...
- linux下C调用lua的第一个程序
linux下C调用lua的第一个程序 linux的环境是Fedora 18,运行在VM workstation中,以开发模式安装,自带了lua 5.1.4,可以在命令行上直接用lua命令进入到lua环 ...
最新文章
- OpenCvSharp 形态学操作(膨胀、腐蚀)
- 几种经典的网络服务器架构模型的分析与比较
- java 栈队列_java 栈 队列实现
- python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
- html在线摄像头,在HTML里加载摄像头的方法
- 2015中国大数据技术大会在北京隆重开幕
- Kicad安装与配置_Windows
- boost::enable_shared_from_this<T>用途
- Mac 版pr 破解教程,亲测可行。
- CAD electrical简易教程(一)
- 软件测试培训两个月骗局?培训机构到底如何选择?
- kotlin使用遇到的坑。。。
- [计算流体力学][Ansys Fluent] 使用 Fluent 计算方腔热对流和卡门涡街
- 错误的英语提示翻译 以及经常犯的无错误
- android 程序数据目录,Android APP 数据存放目录
- 算法学习(2)----丢番图方程
- 滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘-64
- 产品管理精华:第二,工具,适合自己的最好
- B05 - 048、ReduceTask工作机制
- 一些设计上的基本常识 - 梁飞
热门文章
- ASLR和PIE的区别和作用
- 计算机毕业设计ssm绘本馆管理系统n5wn5系统+程序+源码+lw+远程部署
- VsFtpd指定被动端口范围教程
- ​Deity Microphones 发布Pocket Wireless无线话筒
- 美国诚实签经验——安检、指纹采集等流程
- 笔记本硬盘数据导出失败怎么办丨用什么恢复
- (附源码)springboot流浪动物救助系统 毕业设计 180920
- Linux新手入门常用资料
- 推动MRO工业品数字化基建升级,数商云采购系统赋能企业采购数字化管理
- SpringBoot原理篇:bean的多种加载方法之 使用上下文对象regist注入bean