青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

兔子的技術(shù)博客

兔子

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

一.   lua調(diào)用C++

      在lua中是以函數(shù)指針的形式調(diào)用函數(shù), 并且所有的函數(shù)指針都必須滿足如下此種類型:
typedef int (*lua_CFunction) (lua_State *L);  
也就是說(shuō), 偶們?cè)贑++中定義函數(shù)時(shí)必須以lua_State為參數(shù), 以int為返回值才能被Lua所調(diào)用. 但是不要忘記了, 偶們的lua_State是支持棧的, 所以通過(guò)棧可以傳遞無(wú)窮個(gè)參數(shù), 大小只受內(nèi)存大小限制. 而返回的int值也只是指返回值的個(gè)數(shù)真正的返回值都存儲(chǔ)在
lua_State的棧中. 偶們通常的做法是做一個(gè)wrapper, 把所有需要調(diào)用的函數(shù)都wrap一下, 這樣就可以調(diào)用任意的函數(shù)了.

  1. #include<iostream>  
  2. using namespace std;  
  3. #include<stdio.h>  
  4. extern "C" {  
  5. #include <lua.h>  
  6. #include <lualib.h>  
  7. #include <lauxlib.h>  
  8. }  
  9. //#pragma comment(lib, "lua5.1.lib")  
  10. lua_State* L;  
  11. static int average(lua_State *L)  
  12. {  
  13.     //返回棧中元素的個(gè)數(shù)  
  14.     int n = lua_gettop(L);  
  15.     double sum = 0;  
  16.     int i;  
  17.     for (i = 1; i <= n; i++)  
  18.     {  
  19.         if (!lua_isnumber(L, i))   
  20.         {  
  21.             lua_pushstring(L, "Incorrect argument to 'average'");  
  22.             lua_error(L);  
  23.         }  
  24.         sum += lua_tonumber(L, i);  
  25.     }  
  26.     /* push the average */  
  27.     lua_pushnumber(L, sum / n);  
  28.     /* push the sum */  
  29.     lua_pushnumber(L, sum);  
  30.       
  31.     /* return the number of results */  
  32.     return 2;  
  33. }  
  34. int main (int argc,char*argv[])  
  35. {  
  36.     /* initialize Lua */  
  37.     L = lua_open();  
  38.     /* load Lua libraries */  
  39.     luaL_openlibs(L);  
  40.     /* register our function */  
  41.     lua_register(L, "average", average);  
  42.     /* run the script */  
  43.     luaL_dofile(L, "e15.lua");  
  44.       
  45.     lua_getglobal(L,"avg");  
  46.     cout<<"avg is:"<<lua_tointeger(L,-1)<<endl;  
  47.     lua_pop(L,1);  
  48.     lua_getglobal(L,"sum");  
  49.     cout<<"sum is:"<<lua_tointeger(L,-1)<<endl;  
  50.     /* cleanup Lua */  
  51.     lua_close(L);  
  52.       
  53.     return 0;  
  54. }  
  55. //程序  
  56. //*lua_gettop()的作用是返回棧頂元素的序號(hào). 由于Lua的棧是從1開(kāi)始編號(hào)的,  
  57. // 所以棧頂元素的序號(hào)也相當(dāng)于棧中的元素個(gè)數(shù). 在這里, 棧中元素的個(gè)數(shù)就  
  58. // 是傳入的參數(shù)個(gè)數(shù).  
  59. //* for循環(huán)計(jì)算所有傳入?yún)?shù)的總和. 這里用到了數(shù)值轉(zhuǎn)換lua_tonumber().  
  60. //* 然后偶們用lua_pushnumber()把平均值和總和push到棧中.  
  61. //* 最后, 偶們返回2, 表示有兩個(gè)返回值.  
  62. //* 雖然在C++中定義了average()函數(shù), 但Lua程序并不知道, 所以需  
  63. //  要在main函數(shù)中加入  
  64. //     // register our function   
  65. //  lua_register(L, "average", average);  
  66. //  這兩行的作用就是告訴e15.lua有average()這樣一個(gè)函數(shù).  
  67. //* 這個(gè)程序可以存成cpp也可以存成c, 如果以.c為擴(kuò)展名就不需要加extern "C"  
  68. //       
  69. //編譯的方法偶們上次說(shuō)過(guò)了, 方法相同.  
  70. //e15.lua執(zhí)行的方法只能用上例中的C++中執(zhí)行, 而不能用命令行方式執(zhí)行.*/  

 

腳本為

 

avg, sum = average(10, 20, 30, 40, 50)

print("The average is ", avg)

print("The sum is ", sum)

 

 

 

二.  C++調(diào)用lua

  1. #include "stdafx.h"  
  2. #include <stdio.h>  
  3. extern "C" {  
  4. #include "lua.h"  
  5. #include "lualib.h"  
  6. #include "lauxlib.h"  
  7. }  
  8. /* Lua解釋器指針 */  
  9. lua_State* L;  
  10. int main ( int argc, char *argv[] )  
  11. {  
  12.     /* 初始化Lua */  
  13.     L = lua_open();  
  14.     /* 載入Lua基本庫(kù) */  
  15.     luaL_openlibs(L);  
  16.     /* 運(yùn)行腳本 */  
  17.     luaL_dofile(L, "Lua1.lua");  
  18.     /* 清除Lua */  
  19.     lua_close(L);  
  20.     /* 暫停 */  
  21.     printf( "Press enter to exit…" );  
  22.     getchar();  
  23.     return 0;  
  24. }  

 

 

 

  1. /* A simple Lua interpreter. */   
  2. #include <stdio.h>   
  3. extern "C" {  
  4. #include <lua.h>   
  5. #include <lualib.h>  
  6. #include <lauxlib.h>  
  7. }  
  8. #include <stdio.h>  
  9. extern "C" { // 這是個(gè)C++程序, 所以要extern "C",  
  10.     // 因?yàn)閘ua的頭文件都是C格式的  
  11. #include "lua.h"  
  12. #include "lualib.h"  
  13. #include "lauxlib.h"  
  14. }  
  15. #pragma comment(lib, "lua5.1.lib")  
  16. /* the Lua interpreter */  
  17. lua_State* L;  
  18. int luaadd ( int x, int y )  
  19. {  
  20.     int sum;  
  21.     /* the function name */  
  22.     lua_getglobal(L, "add");        int nTop = lua_gettop(L); //得到棧的元素個(gè)數(shù)。棧頂?shù)奈恢谩?nbsp; 
  23.     /* the first argument */  
  24.     lua_pushnumber(L, x);           nTop = lua_gettop(L);  
  25.     /* the second argument */  
  26.     lua_pushnumber(L, y);           nTop = lua_gettop(L);  
  27.     /* call the function with 2 
  28.     arguments, return 1 result */  
  29.     lua_call(L, 2, 1);              nTop = lua_gettop(L);  
  30.     /* get the result */  
  31.     sum = (int)lua_tonumber(L, -1); nTop = lua_gettop(L);  
  32.     /*清掉返回值*/  
  33.     lua_pop(L, 1);                  nTop = lua_gettop(L);  
  34.     /*取出腳本中的變量z的值*/  
  35.     lua_getglobal(L, "z");          nTop = lua_gettop(L);  
  36.     int z = (int)lua_tonumber(L, 1);nTop = lua_gettop(L);  
  37.     lua_pop(L, 1);                  nTop = lua_gettop(L);  
  38.       
  39.     //沒(méi)調(diào)通  
  40.     /*lua_pushnumber(L, 4);         nTop = lua_gettop(L); 
  41.     lua_setglobal(L, "r");          nTop = lua_gettop(L); 
  42.     int r = (int)lua_tonumber(L, 1);nTop = lua_gettop(L);*/  
  43.     return sum;  
  44. }  
  45. int main ( int argc, char *argv[] )  
  46. {  
  47.     int sum;  
  48.     /* initialize Lua */  
  49.     L = lua_open();  
  50.     /* load Lua base libraries */  
  51.     //lua_baselibopen(L);  
  52.     /* load the script */  
  53.     luaL_dofile(L, "e12.lua");  
  54.     /* call the add function */  
  55.     sum = luaadd( 10, 15 );  
  56.     /* print the result */  
  57.     printf( "The sum is %d", sum );  
  58.     /* cleanup Lua */  
  59.     lua_close(L);  
  60.     return 0;  
  61. }  
  62. /*程序說(shuō)明: 
  63. main中過(guò)程偶們上次已經(jīng)說(shuō)過(guò)了, 所以這次只說(shuō)說(shuō)luaadd的過(guò)程 
  64. * 首先用lua_getglobal()把a(bǔ)dd函數(shù)壓棧 
  65. * 然后用lua_pushnumber()依次把x,y壓棧 
  66. * 然后調(diào)用lua_call(), 并且告訴程序偶們有兩個(gè)參數(shù)一個(gè)返回值 
  67. * 接著偶們從棧頂取回返回值, 用lua_tonumber() 
  68. * 最后偶們用lua_pop()把返回值清掉 
  69. */  
 

 

腳本為:

 

-- add two numbers

function add ( x, y )

return x + y + 2

end

 

z = 6

 

轉(zhuǎn)自:http://blog.csdn.net/sndaxdrs/article/details/6230999
posted on 2013-04-17 16:53 會(huì)飛的兔子 閱讀(445) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 非C++技術(shù)資料
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品成人| 欧美sm视频| 欧美在线首页| 激情av一区| 亚洲国产成人久久| 另类综合日韩欧美亚洲| 亚洲人午夜精品免费| 亚洲娇小video精品| 欧美午夜影院| 久久精品免费看| 久久综合伊人77777| av成人免费| 亚洲综合色丁香婷婷六月图片| 国内精品视频在线播放| 亚洲第一级黄色片| 国产精品激情偷乱一区二区∴| 久久九九精品99国产精品| 免费不卡在线观看| 亚洲尤物视频在线| 久久久久国产精品麻豆ai换脸 | 欧美一级电影久久| 亚洲高清网站| 99视频+国产日韩欧美| 国产一区二区三区黄| 亚洲高清免费在线| 国产女精品视频网站免费| 欧美波霸影院| 国产精品捆绑调教| 蜜桃伊人久久| 国产精品国产馆在线真实露脸 | 久热精品视频在线| 亚洲视频日本| 久久久精品动漫| 亚洲视频导航| 久久久国产精品一区二区三区| 99国产成+人+综合+亚洲欧美| 亚洲欧美资源在线| 亚洲日本va午夜在线影院| 亚洲免费在线观看视频| 亚洲人成在线免费观看| 亚洲图片欧美午夜| 亚洲精品极品| 午夜精品久久久久久久久久久久 | 在线亚洲欧美视频| 久久精品人人做人人爽电影蜜月| 艳妇臀荡乳欲伦亚洲一区| 欧美一区精品| 亚洲一区二区在线免费观看| 久久这里只精品最新地址| 亚洲欧美在线看| 欧美国产日韩二区| 久久手机精品视频| 国产精品v亚洲精品v日韩精品| 女女同性精品视频| 国产欧美一区二区精品婷婷| 亚洲精品乱码视频| 亚洲国产黄色片| 亚洲欧美日韩精品在线| aa成人免费视频| 免费美女久久99| 久久一区视频| 国产精品影音先锋| 日韩香蕉视频| 亚洲精品久久久久久久久| 久久精品在线视频| 欧美一激情一区二区三区| 欧美精品一区在线观看| 免费观看在线综合| 国产欧美综合在线| 亚洲精品日韩久久| 亚洲国产欧美不卡在线观看| 欧美在线视频播放| 欧美一区二区视频在线观看2020 | 在线视频精品一区| 欧美jizzhd精品欧美喷水| 久久久久综合| 国产日韩欧美日韩| 亚洲影院免费观看| 亚洲欧美成人一区二区在线电影| 欧美美女bb生活片| 亚洲国产美国国产综合一区二区| 在线观看成人av电影| 欧美一区激情| 久久美女性网| 国产中文一区二区| 欧美在线视频免费播放| 欧美一区二区免费观在线| 欧美视频在线播放| 亚洲精品裸体| 亚洲裸体视频| 久久综合九色综合久99| 久久综合狠狠| 怡红院av一区二区三区| 久久九九精品99国产精品| 欧美在线视频网站| 国产情人节一区| 亚洲欧美日韩在线综合| 欧美伊久线香蕉线新在线| 欧美天堂亚洲电影院在线播放| 亚洲毛片一区| 亚洲一区二区三区影院| 欧美午夜精品久久久久久人妖 | 久久综合电影| 在线精品视频在线观看高清 | 女主播福利一区| 亚洲第一区在线| 亚洲精品美女免费| 欧美乱人伦中文字幕在线| 亚洲精品国产精品国自产观看| 99精品欧美| 欧美日韩国产综合视频在线| 日韩一区二区精品| 亚洲欧美日韩一区二区在线| 国产精品久久久999| 亚洲欧美另类在线观看| 欧美一区二区视频网站| 国产一区久久久| 久久久久免费观看| 亚洲电影激情视频网站| 日韩手机在线导航| 欧美日韩一区二区三区视频| 中国av一区| 午夜精品国产更新| 国产一区在线视频| 久久永久免费| 亚洲国产日韩欧美在线99| 亚洲特色特黄| 国产日韩高清一区二区三区在线| 久久精品盗摄| 亚洲国产精品成人一区二区| av成人福利| 国产日韩精品一区二区三区| 久久精品中文字幕免费mv| 91久久黄色| 亚洲欧美日韩一区二区| 一区二区三区我不卡| 欧美国产精品一区| 亚洲午夜激情免费视频| 久久国产精彩视频| 亚洲国产精品久久| 欧美黄免费看| 亚洲午夜影视影院在线观看| 久久久亚洲国产天美传媒修理工| 亚洲激情精品| 国产精品久久久久久久久久妞妞| 欧美一区二区三区四区夜夜大片| 免费成人性网站| 亚洲视频免费| 黄色成人在线| 欧美日韩成人| 欧美亚洲专区| 亚洲国产婷婷| 久久高清免费观看| 亚洲精品久久久久久下一站| 国产精品另类一区| 狂野欧美激情性xxxx欧美| 亚洲裸体俱乐部裸体舞表演av| 久久久久国产一区二区三区四区| 亚洲日本欧美日韩高观看| 国产精品夜夜嗨| 欧美成年网站| 亚洲一区日韩在线| 欧美成人资源| 欧美一区二区三区四区在线观看 | 亚洲午夜精品福利| 欧美成人精品影院| 亚洲无毛电影| 在线播放豆国产99亚洲| 欧美午夜欧美| 久久综合给合| 亚洲一区二区久久| 免费欧美在线视频| 午夜日韩在线| 在线日本欧美| 国产精品有限公司| 欧美成va人片在线观看| 欧美一级艳片视频免费观看| 亚洲美女区一区| 嫩草成人www欧美| 香蕉成人久久| 一本久道久久综合婷婷鲸鱼| 一区二区亚洲精品国产| 国产精品久久一区主播| 欧美精品高清视频| 久久久久综合一区二区三区| 宅男噜噜噜66国产日韩在线观看| 欧美成人国产一区二区| 久久成人免费| 99成人在线| 最新69国产成人精品视频免费| 国产欧美日韩综合一区在线播放| 欧美日韩网站| 蜜臀久久99精品久久久久久9| 亚洲欧美日韩视频一区| 99热精品在线观看| 亚洲国产另类精品专区 | 欧美日韩免费在线观看| 乱中年女人伦av一区二区| 小处雏高清一区二区三区| 一区二区三区欧美成人|