lua --- 表操作
c api 参考手册:http://www.leeon.me/a/lua-c-api-manual
// LuaTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#pragma comment (lib,"Lua.lib")
#include "lua.hpp"
#include<iostream> #define MAX_COLOR //设置窗口的size
void setWinSize(char *fileName, int *width, int *height)
{
lua_State *lua_state = luaL_newstate();
luaL_openlibs(lua_state); if (luaL_loadfile(lua_state, fileName) || lua_pcall(lua_state, , , ))
{
luaL_error(lua_state, "cannot run configuration fiile: %s", lua_tostring(lua_state, -));
} //变量压入栈
lua_getglobal(lua_state, "width");
lua_getglobal(lua_state, "height"); if (!lua_isnumber(lua_state, -))
{
luaL_error(lua_state, " 'width' should be a number\n ");
} if (!lua_isnumber(lua_state, -))
{
luaL_error(lua_state, " 'height' should be a number\n ");
} *width = (int)lua_tonumber(lua_state, -);
*height = (int)lua_tonumber(lua_state, -); lua_close(lua_state);
} //调函数之前需要假设栈顶元素为一个有效的颜色 table
int getField(lua_State *lua_state, char *key)
{
int result = ; //压入元素
lua_pushstring(lua_state, key); //将原来栈顶的元素弹出,以栈顶的值作为key来访问 - 2位置上的table 并将其值放入栈顶
lua_gettable(lua_state, -);// 第二个参数为 table 在栈中的位置参数 if (!lua_isnumber(lua_state, -))
{
luaL_error(lua_state, "invalid component in background color");
} result = (int)lua_tonumber(lua_state, -) * MAX_COLOR; lua_pop(lua_state, ); return result;
} void setWinBackgroundColor(char *fileName, int *r, int *g, int *b)
{
lua_State *lua_state = luaL_newstate();
luaL_openlibs(lua_state); if (luaL_loadfile(lua_state, fileName) || lua_pcall(lua_state, , , ))
{
luaL_error(lua_state, "cannot run configuration fiile: %s", lua_tostring(lua_state, -));
} //将背景颜色压入栈
lua_getglobal(lua_state, "background");
if (!lua_istable(lua_state, -))
{
luaL_error(lua_state, "'background' is not a valid color table");
} *r = getField(lua_state, "r");
*g = getField(lua_state, "g");
*b = getField(lua_state, "b"); lua_close(lua_state);
} void testSetWndBackground()
{
int _width = , _height = ;
setWinSize("Config.lua", &_width, &_height);
printf("width = %d\n", _width);
printf("height = %d\n", _height); int r = , g = , b = ;
setWinBackgroundColor("Config.lua", &r, &g, &b);
printf("backgroundColor = (%d, %d, %d)\n", r, g, b);
} //在应用中定义颜色
struct ColorTable
{
char *name;
unsigned char red, green, blue;
}colortable[] =
{
{ "WHITE", MAX_COLOR, MAX_COLOR, MAX_COLOR },
{ "RED", MAX_COLOR, , },
{ "GREEN", , MAX_COLOR, },
{ "BLUE", , , MAX_COLOR },
{ "BLACK", , , },
{ NULL, , , }
}; void setfield(lua_State *L, char *key, int value)
{
lua_pushstring(L, key); //key
lua_pushnumber(L, (double)(value / MAX_COLOR)); //value
//以栈顶元素作为 value,以栈顶的下一个元素作为 key,调用完成后弹出栈顶的两个元素
lua_settable(L, -);
} void setcolor(lua_State *L, struct ColorTable *colTab)
{
lua_newtable(L); //创建一个新的 table,然后将其入栈
setfield(L, "r", colTab->red);
setfield(L, "g", colTab->green);
setfield(L, "b", colTab->blue);
lua_setglobal(L, colTab->name); //将 table 出栈并将其赋给一个全局变量名
} void registerAllColor(lua_State *L, struct ColorTable *colTab)
{
int i = ;
while (colTab[i].name != NULL)
{
setcolor(L, &colTab[i++]);
}
} void testRegisterAllColor()
{
lua_State *l = luaL_newstate();
luaL_openlibs(l);
registerAllColor(l, colortable);
lua_close(l);
} int _tmain(int argc, _TCHAR* argv[])
{
testSetWndBackground();
testRegisterAllColor();
system("pause");
return ;
}
lua --- 表操作的更多相关文章
- lua常用操作
1 .Lua生成随机数: Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一 ...
- Lua表(table)的用法_个人总结
Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- Sql Server系列:数据表操作
表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...
- 学习MySQL之单表操作(二)
##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...
- python——Django(ORM连表操作)
千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...
- mysql数据表操作&库操作
首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...
- SQL server基础知识(表操作、数据约束、多表链接查询)
SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...
- LUA表克隆方法归纳
lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...
随机推荐
- 监听器----java
监听器简介: 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletR ...
- PeopleSoft 单点登录
第一次会以guest 用户进来,code 为空 第二次也以guest 进来code 从ssoAP获取到code,根据code 获取token,根据token 获取用户id.
- 基于C#的Appium自动化测试框架(Ⅰ):程序结构
因为工作原因,使用的编程语言都是C#,但是国内相应的Appium资料少得可怜,Java版本的Appium也考虑过,但是奈何自己搞不定Eclipse这个编译环境[说白了就是因为懒…… 无意中看到了外面的 ...
- Unity XLua之协程
如何使用xlua实现协程,示例代码如下: 转载请注明出处:https://www.cnblogs.com/jietian331/p/10735773.html local unpack = unpac ...
- css画斜线(用于时间的显示)
- springmvc 配置之 mvc:default-servlet-handler
配置dispatchServlet的方法一般是: <servlet> <servlet-name>mvc-servlet</servlet-name> <se ...
- Easy methods to select MB Star, Extremely MB Star, MB SD C4, Mercedes BENZ C5 SD
MB Star, Extremely MB SD Connect C4, MB SD C4, Mercedes BENZ C5 SD are usually analysis tools to get ...
- 练手——用Python写的时间戳转换为北京时间的小工具
#北京时间需加上8小时bj = 8*3600 def time_stamp(times): #一天总秒数 nonDaySeconds = 24*3600 leapmonths = [ ...
- MySQL 压缩文件安装遇到的问题及解决方案
第一步:从官网下载压缩文件(链接). 第二步:解压该文件,放置到想放到的位置.我的目录是在 C:\mysql\mysql-8.0.12-winx64 下. 第三步:在C:\mysql\mysql-8. ...
- 论文笔记【三】A Deep Dive into Word Sense Disambiguation with LSTM
深入理解LSTM词义消歧 Minh Le,Marten Postma,Jacopo Urbani和Piek Vossen 阿姆斯特丹自由大学语言,文学和传播系 阿姆斯特丹自由大学计算机科学系 摘要 基 ...