国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C++中調用Lua配置文件和響應函數示例

2024-07-21 23:04:58
字體:
來源:轉載
供稿:網友

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 

 

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潜山县| 桂林市| 响水县| 杭州市| 塘沽区| 武平县| 内黄县| 蓝田县| 丰城市| 津市市| 屏东市| 庆安县| 班戈县| 同德县| 黎川县| 庆城县| 民和| 天津市| 紫阳县| 平罗县| 荔浦县| 霍林郭勒市| 泸定县| 北海市| 仪陇县| 安福县| 平塘县| 诸暨市| 商城县| 皮山县| 靖西县| 湘乡市| 麻栗坡县| 沙湾县| 社旗县| 和田市| 神农架林区| 迁安市| 佛坪县| 延寿县| 贵州省|