国产探花免费观看_亚洲丰满少妇自慰呻吟_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 

 

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杂多县| 连云港市| 五河县| 塔河县| 宜丰县| 广河县| 濮阳县| 扎囊县| 封开县| 浦东新区| 宁海县| 西和县| 沅江市| 平顺县| 肇庆市| 天水市| 九江市| 合川市| 石家庄市| 桑植县| 云梦县| 华池县| 定州市| 徐汇区| 阿拉善右旗| 仪陇县| 合江县| 蒙阴县| 宿松县| 富川| 垫江县| 谢通门县| 子长县| 温州市| 桑植县| 凭祥市| 岐山县| 营山县| 衢州市| 马关县| 远安县|