lua 与 c/c++ 交互(4)将lua作为一种配置文件
来源:互联网 发布:淘宝司法拍卖有佣金吗 编辑:程序博客网 时间:2024/06/03 01:31
将lua作为一种配置文件
假设C程序里有一个窗口,希望用户能指定窗口的 颜色值.
可能 有人 会觉得, 我写一个 txt文件 也可以 实现,
不过 将 lua 做为一种配置 文件的 好处 有 : lua可以处理所有的语法细节 和语法错误. 其次是 实现更复杂的逻辑
这个小程序 是从 文件里 读取 颜色值. 颜色值 可以 设置 成 r,g,b的 table 或者 "red" 这样的 字符串.
下面 上 代码:
test.lua
color= {r = 255,g = 0,b = 0}
或者
color = "red"
// LuaCApi.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
using namespace std;
extern "C"{
//
#include "stdafx.h"
#include <string>
using namespace std;
extern "C"{
#include "lua\lua.h"#include "lua\lauxlib.h"#include "lua\lualib.h"
}
typedef struct Color
{
const char * name;int colorR;int colorG;int colorB;
};
//设置 一些 常量 rgb
Color c[] = {
//设置 一些 常量 rgb
Color c[] = {
{"red",255,0,0},{"green",0,255,0},{"blue",0,0,255}
};
int getColorField(lua_State * l,const char * k){
int getColorField(lua_State * l,const char * k){
lua_getfield(l,-1,k);if (lua_isnumber(l,-1)){
int k = lua_tonumber(l,-1);lua_pop(l,1);//保持调用前的栈状态return k;
}
}
//错误处理
void error(lua_State *l,const char * formart,...){
//错误处理
void error(lua_State *l,const char * formart,...){
va_list args;va_start(args,formart);vfprintf(stderr,formart,args);va_end(args);lua_close(l);exit(-1);
}
int _tmain(int argc, _TCHAR* argv[])
{
int _tmain(int argc, _TCHAR* argv[])
{
lua_State * l = luaL_newstate();luaL_openlibs(l);if (luaL_loadfile(l,"test.lua") || lua_pcall(l,0,0,0))//执行lua.test{
error(l,"error :%s",lua_tostring(l,-1));
}lua_getglobal(l,"color");int type = lua_type(l,-1);if (type == LUA_TSTRING)//color 是一个字符串{
const char * colorName = lua_tostring(l,-1);int i = 0;for (; c[i].name != NULL; i++){
if (strcmp(colorName,c[i].name) == 0)
{
break;
}
}
if (c[i].name != NULL){
int r = c[i].colorR;int b = c[i].colorB;int g = c[i].colorG;printf("%d %d %d",r,g,b);
}else{
printf("无效的 颜色字符:%s",colorName);
}
}else if(type == LUA_TTABLE){//color 是 一个 rgb table
int r = getColorField(l,"r");int g = getColorField(l,"g");int b = getColorField(l,"b");printf("%d %d %d",r,g,b);
}else{
printf("无效的颜色值");
}return 0;
}
0 0
- lua 与 c/c++ 交互(4)将lua作为一种配置文件
- 【Lua】Lua与C交互
- Lua 与C交互
- Lua 与 C 交互
- Lua 与C交互
- Lua 与C交互
- Lua 与C交互
- Lua 与 C 交互
- lua与c交互
- C与lua交互
- Lua与C交互
- lua与c交互
- lua与C++ / Lua 与C交互
- C/C++ 中使用lua作为配置文件
- Lua与C的交互(0)
- Lua与C的交互(1)
- Lua与C的交互(2)
- Lua与C的交互(3)
- [Cocos2d-x开发问题-6] 定时器问题
- 20141204-进化:我们在互联网上奋斗的故事-试读版读后随笔
- JSP详细篇——JDBC操作数据库(二)
- 论文及研究能力的培养
- Maven使用总结
- lua 与 c/c++ 交互(4)将lua作为一种配置文件
- 字母重排
- poj3071(概率dp)
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- 异常的应用实例
- lua之table
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- UVa 208 - Firetruck(DFS判连通+回溯)
- IMAC键盘和鼠标部分功能键失效原因