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. git merge后如何撤销

    merge后发现冲突太多,或者合并的分支代码并不是最新,那就直接撤销再合并好了. git reset --hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区 ...

  2. matlab多个曲面如何画在一个坐标系中的疑问

    matlab多个曲面如何画在一个坐标系中的疑问 [复制链接] [X,Y]=meshgrid(-3:0.1:3);Z=X.^2+Y.^2;mesh(X,Y,-Z)hold onmesh(X,Y,Z)

  3. vs2017 .net core 项目调试浏览器网页闪退Bug

    from:https://blog.csdn.net/qq_36330228/article/details/82152187 vs更新2017最新版本后,项目调试浏览器莫名其妙出现闪退,每次都TMD ...

  4. Nginx Install 记录

    一.安装编译工具及库文件 yum -y install gcc yum -y install gcc-c++ yum -y install zlib; yum -y install pcre-deve ...

  5. webstorm编辑器使用

    1.自动生成vue文件模板,如图

  6. .Net与 WebAssembly 随笔

    WebAssembly 是啥 - WebAssembly 是一种浏览器支持的字节码格式,WebAssembly 字节码和底层机器码很相似可快速装载运行,因此性能相对于 JS 解释执行大大提升,需要放到 ...

  7. ansible-2.1.0.0_module

    ansible --version ansible 2.1.0.0 config file = /home/onest/luoliyu/ceph-ansible/ansible.cfg configu ...

  8. .NET 常用ORM之NHibernate

    NHibernate做.Net应该都不陌生,今天我们就算是温故下这个技术,概念性的东西就不说了,这次主要说本人在实际使用的遇到的问题,比较费解现在就当是记录下,避免以后再犯.本次主要使用的情况是1对N ...

  9. ssm框架搭建的基本配置(一站式教会你搭建)

    首先是需要的jar包: <dependency> <groupId>org.springframework</groupId> <artifactId> ...

  10. react中对于context的理解

    一.context旧版的基本使用 1.context的理解 当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递. 2.context的 ...