lua --- 表操作
c api 参考手册:http://www.leeon.me/a/lua-c-api-manual
1 // LuaTest.cpp : 定义控制台应用程序的入口点。 2 // 3 #include "stdafx.h" 4 #pragma comment (lib,"Lua.lib") 5 #include "lua.hpp" 6 #include<iostream> 7 8 #define MAX_COLOR 255 9 10 //设置窗口的size 11 void setWinSize(char *fileName, int *width, int *height) 12 { 13 lua_State *lua_state = luaL_newstate(); 14 luaL_openlibs(lua_state); 15 16 if (luaL_loadfile(lua_state, fileName) || lua_pcall(lua_state, 0, 0, 0)) 17 { 18 luaL_error(lua_state, "cannot run configuration fiile: %s", lua_tostring(lua_state, -1)); 19 } 20 21 //变量压入栈 22 lua_getglobal(lua_state, "width"); 23 lua_getglobal(lua_state, "height"); 24 25 if (!lua_isnumber(lua_state, -2)) 26 { 27 luaL_error(lua_state, " 'width' should be a number\n "); 28 } 29 30 if (!lua_isnumber(lua_state, -1)) 31 { 32 luaL_error(lua_state, " 'height' should be a number\n "); 33 } 34 35 *width = (int)lua_tonumber(lua_state, -2); 36 *height = (int)lua_tonumber(lua_state, -1); 37 38 lua_close(lua_state); 39 } 40 41 //调函数之前需要假设栈顶元素为一个有效的颜色 table 42 int getField(lua_State *lua_state, char *key) 43 { 44 int result = 0; 45 46 //压入元素 47 lua_pushstring(lua_state, key); 48 49 //将原来栈顶的元素弹出,以栈顶的值作为key来访问 - 2位置上的table 并将其值放入栈顶 50 lua_gettable(lua_state, -2);// 第二个参数为 table 在栈中的位置参数 51 52 if (!lua_isnumber(lua_state, -1)) 53 { 54 luaL_error(lua_state, "invalid component in background color"); 55 } 56 57 result = (int)lua_tonumber(lua_state, -1) * MAX_COLOR; 58 59 lua_pop(lua_state, 1); 60 61 return result; 62 } 63 64 void setWinBackgroundColor(char *fileName, int *r, int *g, int *b) 65 { 66 lua_State *lua_state = luaL_newstate(); 67 luaL_openlibs(lua_state); 68 69 if (luaL_loadfile(lua_state, fileName) || lua_pcall(lua_state, 0, 0, 0)) 70 { 71 luaL_error(lua_state, "cannot run configuration fiile: %s", lua_tostring(lua_state, -1)); 72 } 73 74 //将背景颜色压入栈 75 lua_getglobal(lua_state, "background"); 76 if (!lua_istable(lua_state, -1)) 77 { 78 luaL_error(lua_state, "'background' is not a valid color table"); 79 } 80 81 *r = getField(lua_state, "r"); 82 *g = getField(lua_state, "g"); 83 *b = getField(lua_state, "b"); 84 85 lua_close(lua_state); 86 } 87 88 void testSetWndBackground() 89 { 90 int _width = 0, _height = 0; 91 setWinSize("Config.lua", &_width, &_height); 92 printf("width = %d\n", _width); 93 printf("height = %d\n", _height); 94 95 int r = 0, g = 0, b = 0; 96 setWinBackgroundColor("Config.lua", &r, &g, &b); 97 printf("backgroundColor = (%d, %d, %d)\n", r, g, b); 98 } 99 100 //在应用中定义颜色 101 struct ColorTable 102 { 103 char *name; 104 unsigned char red, green, blue; 105 }colortable[] = 106 { 107 { "WHITE", MAX_COLOR, MAX_COLOR, MAX_COLOR }, 108 { "RED", MAX_COLOR, 0, 0 }, 109 { "GREEN", 0, MAX_COLOR, 0 }, 110 { "BLUE", 0, 0, MAX_COLOR }, 111 { "BLACK", 0, 0, 0 }, 112 { NULL, 0, 0, 0 } 113 }; 114 115 void setfield(lua_State *L, char *key, int value) 116 { 117 lua_pushstring(L, key); //key 118 lua_pushnumber(L, (double)(value / MAX_COLOR)); //value 119 //以栈顶元素作为 value,以栈顶的下一个元素作为 key,调用完成后弹出栈顶的两个元素 120 lua_settable(L, -3); 121 } 122 123 void setcolor(lua_State *L, struct ColorTable *colTab) 124 { 125 lua_newtable(L); //创建一个新的 table,然后将其入栈 126 setfield(L, "r", colTab->red); 127 setfield(L, "g", colTab->green); 128 setfield(L, "b", colTab->blue); 129 lua_setglobal(L, colTab->name); //将 table 出栈并将其赋给一个全局变量名 130 } 131 132 void registerAllColor(lua_State *L, struct ColorTable *colTab) 133 { 134 int i = 0; 135 while (colTab[i].name != NULL) 136 { 137 setcolor(L, &colTab[i++]); 138 } 139 } 140 141 void testRegisterAllColor() 142 { 143 lua_State *l = luaL_newstate(); 144 luaL_openlibs(l); 145 registerAllColor(l, colortable); 146 lua_close(l); 147 } 148 149 int _tmain(int argc, _TCHAR* argv[]) 150 { 151 testSetWndBackground(); 152 testRegisterAllColor(); 153 system("pause"); 154 return 0; 155 }
转载于:https://www.cnblogs.com/luguoshuai/p/10706416.html
lua --- 表操作相关推荐
- Lua 表(table)
介绍 表(Table)是Lua语言中最主要(事实上也是唯一的)和强大的数据结构.使用表,Lua语言可以以一一种简单.统一且高效的方式表示数组.集合.记录和其他很多数据结构.Lua语言也使用表来表示包( ...
- java使用lua脚本操作 redis_在Redis中使用简单强大的Lua脚本
Redis分布式锁加锁 前段时间写Redis分布式锁,想着在小灰文章的基础上再总结一下,这样能有更深的印象,顺便把Lua脚本分享一下,如果项目中使用Redis比较多,那么Lua脚本一定是会用到的,因为 ...
- 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...
- 使用LINQ进行多表操作(二)
1:M或者M:M关系的多表操作 表结构如下 直接写表达式 //正常选取 var user = context.Users.Where(p => p.UserID == 10300).Select ...
- 扩增子分析解读5物种注释,OTU表操作
本网对Markdown排版支持较差,请跳转"宏基因组"公众号阅读: 写在前面 之前发布的<扩增子图表解读>系列,相信关注过我的朋友大部分都看过了(链接直达7月文章目录) ...
- SQL2K数据库开发六之表操作创建产品表products
1.在SQL Server企业管理器中的数据库下的"表"节点上右击鼠标,在弹出的菜单上点击"新建表". 2.在出现的表设计器中,为表中加入五个列:Product ...
- hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...
- SQL2K数据库开发十一之表操作创建UNIQUE约束
1.在数据库关系图中右击表Products,然后从弹出的菜单中选择"属性"命令.或者点击工具栏上的属性图标. 2.或者展开sample数据库,在表Products上 ...
- SQL2K数据库开发八之表操作创建主键
1.使用Transact-SQL语句在表中创建主键时,可以在创建表的语句中定义列时使用如下语法: 2.在查询分析器中输入如下的语句,可以创建一个表Suppliers,该表中的SupplierID列被定 ...
最新文章
- 提升软文营销曝光量可从这几方面着手操作
- Android5.1修改以太网MAC地址(SElinux)
- MySQL 多实例详解
- OpenCv: 二维坐标的旋转方程
- 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字
- python导入excel模块_python使用openpyxl模块操作excel
- 模板题——图论相关(2)
- 人工智能学习思维导图
- Taro小程序分享功能
- 【干货分享】 淘宝客发朋友圈的技巧
- GitHub中国区前100名到底是什么样的人?(转载)
- css变量制作心动的果冻效果(css变量)
- 基于HTML美中华传统文化题材网页项目的设计与实现 (纯HTML+CSS制作中国茶文化网站)...
- HTML- markdown版 江城子·乙卯正月二十日夜记梦
- 工作中jQuery常用实例-主要功能总结整理
- ubuntu20.04如何录制屏幕
- MemSQL 的安装和简单使用 比Mysql快30倍的关系型数据库
- 网页设计期末作业ppt+源码(免费获取)
- 汉字从拼音到文字的完整映射表
- 安徽省铜陵市谷歌卫星地图下载