C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例
更新時(shí)間:2015年07月09日 09:43:46 投稿:junjie
這篇文章主要介紹了C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例,本文使用Lua文件作為配置文件,并寫(xiě)了幾個(gè)響應(yīng)函數(shù)以便在C++中使用,需要的朋友可以參考下
Lua是腳本語(yǔ)言,最大的優(yōu)勢(shì)就是輕巧靈便,不用編譯。當(dāng)C的框架寫(xiě)好,只要更改lua的相應(yīng)處理即可以更改功能,并且不用重新編譯。以下是在C中調(diào)用Lua資源方法的示例程序:
C++端:
// Lua1.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#include "stdafx.h"
#include<stdio.h>
extern "C" { //如不用extern會(huì)出現(xiàn)連接錯(cuò)誤,編譯成了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); //將棧頂元素轉(zhuǎn)化為數(shù)字
*height = (int)lua_tonumber(L,-1);
}
int add(lua_State *L,int a, int b){
int sum=0;
lua_getglobal(L,"add"); //函數(shù)也是變量,所以一個(gè)取法
lua_pushnumber(L,a); //將變量傳入
lua_pushnumber(L,b);
//第二個(gè)參數(shù)為調(diào)用函數(shù)的參數(shù)的個(gè)數(shù),第三個(gè)為返回值的個(gè)數(shù),第四個(gè)參數(shù)是錯(cuò)誤處理函數(shù),正常運(yùn)行返回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); //取棧頂元素將其轉(zhuǎn)為數(shù)字,默認(rèn)為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); //新版本庫(kù)添加的方法
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
相關(guān)文章
舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了舉例講解Lua中的Table數(shù)據(jù)結(jié)構(gòu),說(shuō)明都融入到了注釋中,需要的朋友可以參考下
2015-07-07
Lua學(xué)習(xí)筆記之?dāng)?shù)據(jù)類(lèi)型
這篇文章主要介紹了Lua學(xué)習(xí)筆記之?dāng)?shù)據(jù)類(lèi)型,本文同時(shí)講解了開(kāi)發(fā)環(huán)境的搭建,需要的朋友可以參考下
2014-09-09
Mac平臺(tái)中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例
這篇文章主要介紹了Mac平臺(tái)中編譯安裝Lua運(yùn)行環(huán)境及Hello Lua實(shí)例,本文給出了兩種Hello Lua示例,一種是控制臺(tái)直接輸出,通過(guò)文件編譯輸出,需要的朋友可以參考下
2014-10-10
Lua獲取utf8字符串長(zhǎng)度和字符串截取并用...代替
這篇文章主要介紹了Lua獲取utf8字符串長(zhǎng)度和字符串截取并用...代替,本文直接給出兩個(gè)函數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
2015-04-04 
