Lua是腳本語言,最大的優勢就是輕巧靈便,不用編譯。當C的框架寫好,只要更改lua的相應處理即可以更改功能,并且不用重新編譯。以下是在C中調用Lua資源方法的示例程序:
C++端:
// Lua1.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include<stdio.h> extern "C" { //如不用extern會出現連接錯誤,編譯成了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); //將棧頂元素轉化為數字 *height = (int)lua_tonumber(L,-1); } int add(lua_State *L,int a, int b){ int sum=0; lua_getglobal(L,"add"); //函數也是變量,所以一個取法 lua_pushnumber(L,a); //將變量傳入 lua_pushnumber(L,b); //第二個參數為調用函數的參數的個數,第三個為返回值的個數,第四個參數是錯誤處理函數,正常運行返回0 if(lua_pcall(L,2,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)); } sum = (int)lua_tonumber(L,-1); //取棧頂元素將其轉為數字,默認為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
新聞熱點
疑難解答