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文件相关推荐

  1. C++调用Lua出现 unproteted error in call to Lua API错误的发现过程与解决方法

    用C++调用Lua时,无论怎么调,都发现程序在调用PCall的时候会触发这个错误 这里记录下自己的发现过程: 在pcall之前打印了下 lua_tonumber 取出来的内容,发现没有压进去,考虑文件 ...

  2. 使用ToLua插件 关于Lua脚本中 require 添加模块经常报错找不到Lua文件的问题

    Lua的require添加模块经常报错,找不到 LuaException: E:/UnityProJect/Calculator/Assets/Script/Lua/NpcManage.lua:4: ...

  3. Nginx+lua 实现调用.so文件方法

    本文给大家分享的是Nginx结合lua 实现调用.so动态链接库文件的方法和示例,有需要的小伙伴可以参考下 最近在和智能硬件部门一起,做一个室内定位的服务,该服务根据手机端传过来的beacon设备列表 ...

  4. 脚本语言lua笔记(5)c++调用lua

    首先搭建环境,使用vs2010的c++开发工具,lua源码包,可以去官方下载最新源码包,我采用的是lua-5.1.5的版本.好了,开始配环境. 第一步: 下载源码包后,解压lua-5.1.5源码包到硬 ...

  5. 留念,第一次在C中调用lua成功!

    反反复复学lua N多次了,这次终于在C中调用lua成功了!一大进步啊! 记录下过程: 1.找到代码如下: //add.c #include        <stdio.h> #inclu ...

  6. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  7. Lua 文件 I/O

    Lua I/O 库用于读取和处理文件.分为简单模式(和C一样).完全模式. 简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作. 完全模式(co ...

  8. cocos2dx java 调用lua_cocos2dx之C++调用Lua

    1.引入头文件 #include "cocos2d.h" #include "CCLuaEngine.h" USING_NS_CC; using namespa ...

  9. linux下C调用lua的第一个程序

    linux下C调用lua的第一个程序 linux的环境是Fedora 18,运行在VM workstation中,以开发模式安装,自带了lua 5.1.4,可以在命令行上直接用lua命令进入到lua环 ...

最新文章

  1. OpenCvSharp 形态学操作(膨胀、腐蚀)
  2. 几种经典的网络服务器架构模型的分析与比较
  3. java 栈队列_java 栈 队列实现
  4. python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
  5. html在线摄像头,在HTML里加载摄像头的方法
  6. 2015中国大数据技术大会在北京隆重开幕
  7. Kicad安装与配置_Windows
  8. boost::enable_shared_from_this<T>用途
  9. Mac 版pr 破解教程,亲测可行。
  10. CAD electrical简易教程(一)
  11. 软件测试培训两个月骗局?培训机构到底如何选择?
  12. kotlin使用遇到的坑。。。
  13. [计算流体力学][Ansys Fluent] 使用 Fluent 计算方腔热对流和卡门涡街
  14. 错误的英语提示翻译 以及经常犯的无错误
  15. android 程序数据目录,Android APP 数据存放目录
  16. 算法学习(2)----丢番图方程
  17. 滴滴新算法让你应对女友?道翰天琼认知智能机器人平台API接口大脑为您揭秘-64
  18. 产品管理精华:第二,工具,适合自己的最好
  19. B05 - 048、ReduceTask工作机制
  20. 一些设计上的基本常识 - 梁飞

热门文章

  1. ASLR和PIE的区别和作用
  2. 计算机毕业设计ssm绘本馆管理系统n5wn5系统+程序+源码+lw+远程部署
  3. VsFtpd指定被动端口范围教程
  4. ​Deity Microphones 发布Pocket Wireless无线话筒
  5. 美国诚实签经验——安检、指纹采集等流程
  6. 笔记本硬盘数据导出失败怎么办丨用什么恢复
  7. (附源码)springboot流浪动物救助系统 毕业设计 180920
  8. Linux新手入门常用资料
  9. 推动MRO工业品数字化基建升级,数商云采购系统赋能企业采购数字化管理
  10. SpringBoot原理篇:bean的多种加载方法之 使用上下文对象regist注入bean