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

兔子的技術(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>
            鲁大师影院一区二区三区| 国产亚洲视频在线| 日韩视频专区| 午夜精品一区二区在线观看| 国产精品高潮久久| 久久成人资源| 最新国产成人av网站网址麻豆| 亚洲美女啪啪| 国产精品乱码妇女bbbb| 欧美在线观看一二区| 欧美黄在线观看| 亚洲天堂激情| 黄色欧美成人| 欧美久久一级| 欧美亚洲综合网| 欧美激情第8页| 亚洲欧美日韩视频一区| 激情婷婷亚洲| 欧美日韩调教| 久久久激情视频| 一本久久a久久免费精品不卡| 欧美在线电影| 亚洲免费观看高清在线观看| 国产视频在线观看一区| 欧美不卡高清| 欧美一二三区精品| 亚洲毛片在线免费观看| 久久久另类综合| 亚洲视频第一页| 亚洲电影欧美电影有声小说| 国产精品二区二区三区| 久久欧美中文字幕| 亚洲一区精品视频| 亚洲精华国产欧美| 久久亚洲美女| 亚洲欧美日韩久久精品| 亚洲精品一区二区三区不| 国产日韩1区| 欧美视频导航| 欧美国产日韩一区二区在线观看 | 一本色道精品久久一区二区三区 | av不卡在线| 亚洲大片一区二区三区| 国产免费一区二区三区香蕉精| 免费观看欧美在线视频的网站| 午夜国产精品视频| 在线视频你懂得一区二区三区| 亚洲成人在线网站| 久久亚洲私人国产精品va媚药| 亚洲一二三四久久| 一本久久a久久免费精品不卡| 亚洲福利电影| 怡红院精品视频在线观看极品| 国产精品男人爽免费视频1 | 亚洲激情一区二区| 激情亚洲成人| 黄色成人免费观看| 国产日韩欧美成人| 国产精品视频一二| 欧美三区在线观看| 欧美日韩1区2区| 欧美高清视频一二三区| 噜噜噜躁狠狠躁狠狠精品视频| 欧美一区二区高清在线观看| 亚洲欧美成人一区二区在线电影| 夜夜嗨av一区二区三区网页| 亚洲精品人人| 一区二区三区欧美激情| 99精品视频一区二区三区| 野花国产精品入口| 亚洲图片在区色| 一区二区三区不卡视频在线观看| 亚洲国产精品久久91精品| 亚洲国产mv| 亚洲乱码国产乱码精品精天堂| 亚洲肉体裸体xxxx137| 亚洲精品一区二区三区99| 亚洲精品久久久久久下一站 | 一区二区三区视频观看| 一区二区三区成人精品| 日韩一二三区视频| 国产精品99久久久久久久久久久久| 99国内精品久久| 亚洲自拍16p| 欧美专区亚洲专区| 美女啪啪无遮挡免费久久网站| 欧美丰满高潮xxxx喷水动漫| 欧美精品一卡二卡| 国产精品成人一区二区三区夜夜夜| 欧美午夜精品一区| 国产午夜精品久久久久久久| 在线日韩中文字幕| 野花国产精品入口| 欧美一区二区三区视频免费播放| 久久精品中文字幕免费mv| 免费观看成人www动漫视频| 亚洲高清在线观看一区| 亚洲天堂第二页| 欧美专区日韩视频| 欧美激情久久久久| 国产欧美日韩亚洲一区二区三区 | 亚洲日本va午夜在线影院| 亚洲天堂成人| 久久―日本道色综合久久| 欧美激情中文字幕乱码免费| 国产精品欧美激情| 亚洲成人在线网| 一区二区三区你懂的| 久久九九全国免费精品观看| 欧美国产日产韩国视频| 9l视频自拍蝌蚪9l视频成人| 性伦欧美刺激片在线观看| 久久综合九色| 国产精品乱人伦中文| 亚洲福利专区| 欧美一级欧美一级在线播放| 欧美成人影音| 午夜精品电影| 欧美日韩亚洲另类| 有码中文亚洲精品| 午夜精品www| 亚洲黄网站在线观看| 久久成人亚洲| 国产精品成人一区二区三区夜夜夜| 一区在线观看视频| 午夜精品久久久久久久99水蜜桃| 欧美高清在线精品一区| 亚洲欧美国产毛片在线| 欧美日韩成人网| 亚洲国产精品va在线观看黑人| 亚洲免费在线观看视频| 欧美激情精品久久久久| 欧美有码在线视频| 国产精品v欧美精品v日本精品动漫 | 欧美伊人久久久久久久久影院| 欧美激情中文字幕一区二区| 性色一区二区| 国产精品美女999| 99在线观看免费视频精品观看| 麻豆精品视频在线观看视频| 亚洲一区www| 欧美日韩一区视频| 亚洲精选在线| 欧美~级网站不卡| 久久久久99| 国产日韩欧美二区| 欧美亚洲免费在线| 亚洲视频网站在线观看| 欧美日韩色婷婷| 一本大道av伊人久久综合| 欧美激情五月| 蜜臀久久久99精品久久久久久| 在线成人亚洲| 欧美成人一区二区| 久久综合影视| 亚洲国产精品一区二区www| 久久综合九色综合久99| 欧美一区二视频| 国产一区二区精品在线观看| 欧美一区二区三区播放老司机| 亚洲一区二区欧美| 国产乱肥老妇国产一区二 | 久久激情五月激情| 午夜欧美理论片| 狠狠色狠狠色综合系列| 久久免费一区| 久久手机精品视频| 亚洲精品久久视频| 亚洲人成亚洲人成在线观看| 欧美激情综合在线| 宅男噜噜噜66一区二区66| 一区二区三区久久久| 国产精品视频一| 久久久之久亚州精品露出| 久久精品理论片| 亚洲精品国精品久久99热一| 亚洲欧洲日夜超级视频| 欧美日韩一视频区二区| 香蕉久久国产| 久久电影一区| 91久久夜色精品国产网站| 日韩系列在线| 国产精品亚洲综合| 久久综合狠狠综合久久激情| 麻豆久久婷婷| 中文在线一区| 欧美一级久久久| 亚洲电影自拍| 中国日韩欧美久久久久久久久| 国产欧美日韩视频一区二区三区 | 亚洲婷婷国产精品电影人久久| 一区二区三区精品视频| 国产午夜精品一区二区三区视频| 美女视频一区免费观看| 欧美激情一区在线观看| 欧美一区三区三区高中清蜜桃| 久久久久国产精品一区三寸 | 亚洲专区在线| 最新日韩中文字幕| 亚洲欧美激情视频|