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
新聞熱點
疑難解答
圖片精選