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缓存此表, 但是多次逻辑执行, 都使用的 ...
随机推荐
- AES加密解密 助手类 CBC加密模式
"; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...
- 获取Button脚本挂载的事件名
(function(){ var Super = function(){}; Super.prototype = cc.Button.prototype; //实例化原型 Super.prototyp ...
- IconFont --阿里巴巴矢量库
超多的图标网站,可自己设置颜色,然后下载. IconFont --阿里巴巴矢量库
- window安装pycharm Django
pycharm 安装Pycharm 直接在官网下载就可以,这里说一下如何破解注册码的问题: 修改电脑中hosts文件(地址: C:\Windows\System32\drivers\etc ),改变 ...
- bochs模拟器创建映像文件 、写入文件并启动
安装 bochs,dd for windows,nasm,并将安装目录加入到环境变量中. 我用的bochs版本是2.6.8 1.用 bochs 中 bximage.exe 创建新的 img 文件 2. ...
- Spring Boot默认的JSON解析框架设置
方案一:启动类继承WebMvcConfigurerAdapter,覆盖方法configureMessageConverters ... @SpringBootApplication public cl ...
- .NET Framework简介
NET Framework 就是微软Web Services 引擎1.NET Framework 旨在实现下列目标:提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但 ...
- python操作字符串类型json的注意点
python操作json的方法有json.dumps——将json对象(字典)转换为字符串对象json.loads——将字符串对象转换为json对象(字典)如果定义json对象jsonstring1= ...
- 大佬是怎么思考设计MySQL优化方案的?
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 一.优化的哲学 注:优化有风险,涉足需谨 ...
- 02:安装 Kerberos
1.1 环境介绍 参考博客:https://www.cnblogs.com/xiaodf/p/5968178.html https://www.douban.com/note/701660289/ ...