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. mysql-5.7.25 源码 安装

    mysql-5.7.25 源码 安装 编译 export INSTALL_PREFIX="/data/services" export MYSQL_INSTALL_PATH=&qu ...

  2. CDIE2019中国数字化创新展暨首席信息官峰会上海站来袭~

    China Digital Innovation Expo & CIO Summit 2019是由Dot Connector(上海华昂商务咨询有限公司)主办的第五届聚焦中国技术领袖,探索创新, ...

  3. Mac vs code 快捷键

    control  +  shift  +  L 选中所有匹配的所有单词,光标选中

  4. UGUI中UI与模型混合显示

    法一: 利用Render Texture 在project面板创建 在面板中在创建一个Camera,对准要显示的模型 对Render Texture 进行设置 在Canvas下创建RawImage 就 ...

  5. AIM Tech Round 5 (rated, Div. 1 + Div. 2) (A, B, E)

    B.Unnatural Conditions 题目链接 : http://codeforces.com/contest/1028/problem/B #include<iostream> ...

  6. Centos7 pcs pacemaker高可用安装配置详解

  7. selenium 定位密码软键盘

    from selenium import webdriver import time driver = webdriver.Chrome() driver.maximize_window() driv ...

  8. MQ知识点汇总

    1. MQ是什么 2. MQ能做什么 3. 消息模式 4. 使用MQ的时候需要注意什么 5. 常用MQ 6. MQ的不足 7. 什么时候不适用MQ 8. MQ的组成 9. MQ的关注点 1. MQ是什 ...

  9. dlo,学习清单

    肥文自动机 模拟纵火 替罪羊 法法塔 ntt

  10. Spring Cloud Zuul 中文文件上传乱码

    原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...