C++中調用Lua配置文件和響應函數(shù)示例
更新時間:2015年07月09日 09:43:46 投稿:junjie
這篇文章主要介紹了C++中調用Lua配置文件和響應函數(shù)示例,本文使用Lua文件作為配置文件,并寫了幾個響應函數(shù)以便在C++中使用,需要的朋友可以參考下
Lua是腳本語言,最大的優(yōu)勢就是輕巧靈便,不用編譯。當C的框架寫好,只要更改lua的相應處理即可以更改功能,并且不用重新編譯。以下是在C中調用Lua資源方法的示例程序:
C++端:
// Lua1.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include<stdio.h> extern "C" { //如不用extern會出現(xiàn)連接錯誤,編譯成了C++文件 #include <lua.h> #include <lualib.h> #include <lauxlib.h> } void load (lua_State *L,int *width,int *height){ lua_getglobal(L,"width"); //獲得Lua中變量的值,將其放入棧中 lua_getglobal(L,"height"); if(!lua_isnumber(L,-2)) //棧頂為-1,然后依次減少 luaL_error(L,"`width' should be a number\n"); if(!lua_isnumber(L,-1)) luaL_error(L,"`height' should be a number\n"); *width = (int)lua_tonumber(L,-2); //將棧頂元素轉化為數(shù)字 *height = (int)lua_tonumber(L,-1); } int add(lua_State *L,int a, int b){ int sum=0; lua_getglobal(L,"add"); //函數(shù)也是變量,所以一個取法 lua_pushnumber(L,a); //將變量傳入 lua_pushnumber(L,b); //第二個參數(shù)為調用函數(shù)的參數(shù)的個數(shù),第三個為返回值的個數(shù),第四個參數(shù)是錯誤處理函數(shù),正常運行返回0 if(lua_pcall(L,2,1,0) != 0){ luaL_error(L,"the lua load error! %s",lua_tostring(L,-1)); } //函數(shù)的返回值已經(jīng)傳入棧中 if(!lua_isnumber(L,-1)){ luaL_error(L,"the func run error! %s",lua_tostring(L,-1)); } sum = (int)lua_tonumber(L,-1); //取棧頂元素將其轉為數(shù)字,默認為double型 lua_pop(L,1) //將return元素移除 return sum; } int get_num(lua_State *L){ lua_getglobal(L,"roll_num"); if(lua_pcall(L,0,1,0) != 0){ luaL_error(L,"the lua load error! %s",lua_tostring(L,-1)); } if(!lua_isnumber(L,-1)){ luaL_error(L,"the func run error! %s",lua_tostring(L,-1)); } int n = (int)lua_tonumber(L,-1); lua_pop(L,1); return n; } int _tmain(int argc, _TCHAR* argv[]) { lua_State *L = lua_open(); luaL_openlibs(L); //新版本庫添加的方法 if(luaL_loadfile(L,"cof.lua") || lua_pcall(L,0,0,0)){ luaL_error(L,"loadfile error! %s \n",lua_tostring(L,-1)); } int w=1,h=2; int sum; load(L,&w,&h); printf("width is %d ,height is %d\n",w,h); sum=add(L,w,h); printf("the sum is: %d \n",sum); bool flag = true; char c; while(flag){ printf("Do you want to roll the number? \n"); scanf("%c",&c); if(c == 'y' || c=='Y'){ printf("rolling the number....\n the num is %d \n",get_num(L)); } else flag=false; getchar(); } getchar(); return 0; }
Lua 文件:
-- config test width = 200 height = 500 function add(a,b) return a+b end math.randomseed(os.time()) function roll_num() return math.random(6) end
相關文章
Lua中使用元表(metatable)執(zhí)行算術類元方法實例
這篇文章主要介紹了Lua中使用元表(metatable)執(zhí)行算術類元方法實例,本文給出了加法、減法、乘法、除法、相反數(shù)、取模等內(nèi)容,需要的朋友可以參考下2014-09-09簡單的Lua 連接操作mysql數(shù)據(jù)庫的方法
lua連接數(shù)據(jù)庫不只luasql這個庫,但目前更新最快的的貌似是這個luasql,他是開源的,下面我們就來看看如何來具體操作吧2015-10-10