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 --- 表操作相关推荐

  1. Lua 表(table)

    介绍 表(Table)是Lua语言中最主要(事实上也是唯一的)和强大的数据结构.使用表,Lua语言可以以一一种简单.统一且高效的方式表示数组.集合.记录和其他很多数据结构.Lua语言也使用表来表示包( ...

  2. java使用lua脚本操作 redis_在Redis中使用简单强大的Lua脚本

    Redis分布式锁加锁 前段时间写Redis分布式锁,想着在小灰文章的基础上再总结一下,这样能有更深的印象,顺便把Lua脚本分享一下,如果项目中使用Redis比较多,那么Lua脚本一定是会用到的,因为 ...

  3. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

  4. 使用LINQ进行多表操作(二)

    1:M或者M:M关系的多表操作 表结构如下 直接写表达式 //正常选取 var user = context.Users.Where(p => p.UserID == 10300).Select ...

  5. 扩增子分析解读5物种注释,OTU表操作

    本网对Markdown排版支持较差,请跳转"宏基因组"公众号阅读: 写在前面 之前发布的<扩增子图表解读>系列,相信关注过我的朋友大部分都看过了(链接直达7月文章目录) ...

  6. SQL2K数据库开发六之表操作创建产品表products

    1.在SQL Server企业管理器中的数据库下的"表"节点上右击鼠标,在弹出的菜单上点击"新建表". 2.在出现的表设计器中,为表中加入五个列:Product ...

  7. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

  8. SQL2K数据库开发十一之表操作创建UNIQUE约束

    1.在数据库关系图中右击表Products,然后从弹出的菜单中选择"属性"命令.或者点击工具栏上的属性图标.         2.或者展开sample数据库,在表Products上 ...

  9. SQL2K数据库开发八之表操作创建主键

    1.使用Transact-SQL语句在表中创建主键时,可以在创建表的语句中定义列时使用如下语法: 2.在查询分析器中输入如下的语句,可以创建一个表Suppliers,该表中的SupplierID列被定 ...

最新文章

  1. 提升软文营销曝光量可从这几方面着手操作
  2. Android5.1修改以太网MAC地址(SElinux)
  3. MySQL 多实例详解
  4. OpenCv: 二维坐标的旋转方程
  5. 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字
  6. python导入excel模块_python使用openpyxl模块操作excel
  7. 模板题——图论相关(2)
  8. 人工智能学习思维导图
  9. Taro小程序分享功能
  10. 【干货分享】 淘宝客发朋友圈的技巧
  11. GitHub中国区前100名到底是什么样的人?(转载)
  12. css变量制作心动的果冻效果(css变量)
  13. 基于HTML美中华传统文化题材网页项目的设计与实现 (纯HTML+CSS制作中国茶文化网站)...
  14. HTML- markdown版 江城子·乙卯正月二十日夜记梦
  15. 工作中jQuery常用实例-主要功能总结整理
  16. ubuntu20.04如何录制屏幕
  17. MemSQL 的安装和简单使用 比Mysql快30倍的关系型数据库
  18. 网页设计期末作业ppt+源码(免费获取)
  19. 汉字从拼音到文字的完整映射表
  20. 安徽省铜陵市谷歌卫星地图下载

热门文章

  1. UVA1437 String painter
  2. sklearn自定义svm核函数(外部和内部定义)
  3. 怎样实现一个非阻塞的超时重试任务队列
  4. mysql 原理~ 乐观锁和悲观锁
  5. python---内置模块
  6. javascript热身运动-了解最基本的知识
  7. Oracle的tnsnames.ora配置(PLSQL Developer)
  8. 20135316王剑桥 linux第六周课实验笔记
  9. XP去除开机登陆画面
  10. 架构整洁之道 pdf_代码有整洁之道,而架构同样有整洁之道