C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例
更新時間:2015年07月09日 09:43:46 投稿:junjie
這篇文章主要介紹了C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例,本文使用Lua文件作為配置文件,并寫了幾個響應(yīng)函數(shù)以便在C++中使用,需要的朋友可以參考下
Lua是腳本語言,最大的優(yōu)勢就是輕巧靈便,不用編譯。當(dāng)C的框架寫好,只要更改lua的相應(yīng)處理即可以更改功能,并且不用重新編譯。以下是在C中調(diào)用Lua資源方法的示例程序:
C++端:
// Lua1.cpp : 定義控制臺應(yīng)用程序的入口點。
//
#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); //將棧頂元素轉(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ù)也是變量,所以一個取法
lua_pushnumber(L,a); //將變量傳入
lua_pushnumber(L,b);
//第二個參數(shù)為調(diào)用函數(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); //取棧頂元素將其轉(zhuǎn)為數(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
相關(guān)文章
Lua中使用元表(metatable)執(zhí)行算術(shù)類元方法實例
這篇文章主要介紹了Lua中使用元表(metatable)執(zhí)行算術(shù)類元方法實例,本文給出了加法、減法、乘法、除法、相反數(shù)、取模等內(nèi)容,需要的朋友可以參考下2014-09-09
簡單的Lua 連接操作mysql數(shù)據(jù)庫的方法
lua連接數(shù)據(jù)庫不只luasql這個庫,但目前更新最快的的貌似是這個luasql,他是開源的,下面我們就來看看如何來具體操作吧2015-10-10

