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 --- 表操作的更多相关文章

  1. lua常用操作

    1 .Lua生成随机数: Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一 ...

  2. Lua表(table)的用法_个人总结

    Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...

  3. Mysql常用表操作 | 单表查询

    160905 常用表操作 1. mysql -u root -p 回车 输入密码   2. 显示数据库列表 show databases     3. 进入某数据库 use database data ...

  4. Sql Server系列:数据表操作

    表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...

  5. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

  6. python——Django(ORM连表操作)

    千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...

  7. mysql数据表操作&库操作

    首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...

  8. SQL server基础知识(表操作、数据约束、多表链接查询)

    SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...

  9. LUA表克隆方法归纳

    lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...

随机推荐

  1. std::vector<bool> 在 auto 推断下的返回值是 bool & 引用

    转自: https://www.cnblogs.com/hustxujinkang/p/5218148.html //////////// std::vector<bool> featur ...

  2. 数据迁移时 提示 No changes detected

    1.删除数据库中django_migrations 中对应的信息 2.删除app下的migrations对应的文件 3.重新执行就可成功 如不成功 ,直接删库 ,重新迁移

  3. [阿里云] 云数据库mongodb外网连接

    原教程,https://www.alibabacloud.com/help/zh/doc-detail/55253.htm 但按照这里的教程,还是连不上mongdb,甚至在ECS上也ping不通mon ...

  4. ftp 上传和下载

    ftp 下载 #!/bin/bash #auth liwei #date DATE=$(date -d today +%Y%m%d) #data files path SRCDIR=/home/web ...

  5. Linux的DNS配置3-多域

    1.实验目的 现要求在两个局域网中分别搭建各自的DNS服务器,并通过相关设置,使得两个DNS服务器能相互解析 2.实验拓扑 3.实验分析 要使两个不同网络的DNS服务器能相互访问,需要额外假设一台DN ...

  6. java线程学习之Sleep方法

    sleep方法是在线程中常用到的一个方法,它是一个静态方法. sleep(long millis)       在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度 ...

  7. 对于react-redux的理解

    一.redux与组件 React-Redux提供connect方法,用于从UI组件生成容器组件 二.react-redux的基本使用 1.引入 import {Provider} from " ...

  8. mask rcnn input数据理解

    Array.min() #无参,所有中的最小值 Array.min(0) # axis=0; 每列的最小值 Array.min(1) # axis=1:每行的最小值 字符串在输出时的对齐: S.lju ...

  9. Flutter数据库Sqflite之增删改查

    Flutter数据库Sqflite之增删改查   简介 sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.3 sqflite插件地址:h ...

  10. ELK学习笔记之logstash安装logstash-filter-multiline(在线离线安装)

    0x00 概述 ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中单条单条,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题 g ...