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

兔子的技術博客

兔子

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評論

閱讀排行榜

評論排行榜

一.   lua調用C++

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

  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.     //返回棧中元素的個數  
  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()的作用是返回棧頂元素的序號. 由于Lua的棧是從1開始編號的,  
  57. // 所以棧頂元素的序號也相當于棧中的元素個數. 在這里, 棧中元素的個數就  
  58. // 是傳入的參數個數.  
  59. //* for循環計算所有傳入參數的總和. 這里用到了數值轉換lua_tonumber().  
  60. //* 然后偶們用lua_pushnumber()把平均值和總和push到棧中.  
  61. //* 最后, 偶們返回2, 表示有兩個返回值.  
  62. //* 雖然在C++中定義了average()函數, 但Lua程序并不知道, 所以需  
  63. //  要在main函數中加入  
  64. //     // register our function   
  65. //  lua_register(L, "average", average);  
  66. //  這兩行的作用就是告訴e15.lua有average()這樣一個函數.  
  67. //* 這個程序可以存成cpp也可以存成c, 如果以.c為擴展名就不需要加extern "C"  
  68. //       
  69. //編譯的方法偶們上次說過了, 方法相同.  
  70. //e15.lua執行的方法只能用上例中的C++中執行, 而不能用命令行方式執行.*/  

 

腳本為

 

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

print("The average is ", avg)

print("The sum is ", sum)

 

 

 

二.  C++調用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基本庫 */  
  15.     luaL_openlibs(L);  
  16.     /* 運行腳本 */  
  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" { // 這是個C++程序, 所以要extern "C",  
  10.     // 因為lua的頭文件都是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); //得到棧的元素個數。棧頂的位置。  
  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.     //沒調通  
  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. /*程序說明: 
  63. main中過程偶們上次已經說過了, 所以這次只說說luaadd的過程 
  64. * 首先用lua_getglobal()把add函數壓棧 
  65. * 然后用lua_pushnumber()依次把x,y壓棧 
  66. * 然后調用lua_call(), 并且告訴程序偶們有兩個參數一個返回值 
  67. * 接著偶們從棧頂取回返回值, 用lua_tonumber() 
  68. * 最后偶們用lua_pop()把返回值清掉 
  69. */  
 

 

腳本為:

 

-- add two numbers

function add ( x, y )

return x + y + 2

end

 

z = 6

 

轉自:http://blog.csdn.net/sndaxdrs/article/details/6230999
posted on 2013-04-17 16:53 會飛的兔子 閱讀(441) 評論(0)  編輯 收藏 引用 所屬分類: 非C++技術資料
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲黑丝在线| 久久久久久有精品国产| 国产精品hd| 欧美日韩不卡| 亚洲精品乱码视频| 欧美1区2区| 欧美激情精品久久久久久蜜臀 | 午夜在线电影亚洲一区| 中国亚洲黄色| 亚洲欧美日韩综合国产aⅴ| 嫩草成人www欧美| 欧美大片免费看| 欧美激情国产日韩精品一区18| 久久aⅴ国产紧身牛仔裤| 欧美永久精品| 久久亚洲午夜电影| 欧美大片在线观看| 鲁鲁狠狠狠7777一区二区| 久久久久国内| 欧美激情精品久久久六区热门| 欧美sm重口味系列视频在线观看| 老司机免费视频久久| 激情综合中文娱乐网| 国产精品久久久久一区二区三区共| 欧美日韩在线综合| 国产一区二区三区不卡在线观看 | 亚洲激情国产| 一区二区三区视频观看| 午夜欧美电影在线观看| 久久久999国产| 欧美国产高潮xxxx1819| 久久久99爱| 欧美精品久久一区二区| 欧美日韩精品是欧美日韩精品| 国产精品久久夜| 黄色国产精品一区二区三区| 国产精品国产三级国产a| 国产日产欧美精品| 亚洲精品中文字幕在线观看| 先锋影音网一区二区| 久久精品综合网| 久久九九99| 亚洲麻豆国产自偷在线| 亚洲欧美一区二区精品久久久| 一区二区三区免费观看| 久久精品夜色噜噜亚洲a∨| 欧美日韩免费在线观看| 欧美一区二区大片| 欧美日韩一区二区国产| 欧美日韩理论| 亚洲国产经典视频| 亚洲久久成人| 免费91麻豆精品国产自产在线观看| 亚洲精品综合精品自拍| 欧美在线地址| 国产精品日本欧美一区二区三区| 亚洲经典自拍| 欧美69视频| 久久久国产午夜精品| 国产精品久久久| 国产精品99久久久久久久女警| 免费观看30秒视频久久| 亚洲精品久久久久久久久久久久久| 久久国产福利| 国内久久视频| 久久婷婷蜜乳一本欲蜜臀| 亚洲综合色婷婷| 国产精品免费网站| 亚洲看片一区| 最新中文字幕一区二区三区| 久久久久久久久久久久久女国产乱 | 国产精品一二三四区| 亚洲乱码视频| 亚洲国产精品成人精品| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲视频电影图片偷拍一区| 欧美成人伊人久久综合网| 亚洲国产日韩欧美| 亚洲成人资源网| 欧美成人激情在线| 亚洲精品在线视频| 欧美激情一区在线观看| 久久综合狠狠综合久久激情| 国产尤物精品| 欧美88av| 欧美日本韩国| 亚洲欧美日韩一区在线观看| 在线亚洲精品福利网址导航| 久久精品综合一区| 在线精品亚洲一区二区| 欧美国产日韩在线| 欧美日韩视频在线| 午夜精品一区二区三区四区| 亚洲欧美春色| 亚洲高清123| 亚洲免费av片| 国产一区高清视频| 日韩视频亚洲视频| 国产亚洲欧美另类中文| 欧美激情精品久久久| 国产精品一区二区在线观看不卡| 欧美高清你懂得| 国产在线一区二区三区四区| 亚洲人成网站在线播| 国产视频丨精品|在线观看| 亚洲黄色在线| 亚洲国产精品成人精品| 久久国产精品一区二区三区四区| 亚洲一级高清| 欧美大香线蕉线伊人久久国产精品| 欧美亚洲网站| 欧美午夜一区| 亚洲精品视频在线播放| 在线观看国产欧美| 欧美一区二区免费视频| 亚洲在线中文字幕| 欧美日韩小视频| 亚洲欧洲精品一区二区三区不卡| 精品999久久久| 久久9热精品视频| 久久精品日韩一区二区三区| 国产精品二区在线观看| av成人天堂| 亚洲视频播放| 欧美日韩三级一区二区| 91久久精品国产91性色tv| 在线观看福利一区| 久久午夜色播影院免费高清| 久久久91精品国产一区二区精品| 国产精品久久久久久久9999| 99视频有精品| 亚洲综合大片69999| 国产精品videossex久久发布| 日韩亚洲国产精品| 亚洲自拍偷拍色片视频| 国产精品免费在线| 亚洲欧美另类中文字幕| 久久精品网址| 亚洲第一黄网| 欧美激情综合在线| 亚洲日本va在线观看| 欧美日韩在线播放三区四区| 亚洲人成网站在线播| 亚洲一区二区成人| 国产精品亚洲产品| 欧美在线一级va免费观看| 久久九九全国免费精品观看| 国产字幕视频一区二区| 狂野欧美一区| 亚洲伦理中文字幕| 欧美一区二区在线看| 国产一区二区三区在线观看视频 | 久久一区二区三区国产精品| 欧美v日韩v国产v| 99热免费精品在线观看| 国产精品久久久久久久久久尿 | 性色一区二区三区| 韩国免费一区| 欧美精选一区| 亚洲欧美在线另类| 欧美aa国产视频| 亚洲小说春色综合另类电影| 国产精品一区在线观看| 久久午夜av| 亚洲一二三区视频在线观看| 久久久久.com| 在线亚洲欧美视频| 黄色日韩在线| 欧美日韩黄色大片| 久久久精品一区二区三区| 亚洲精品久久久久久久久| 久久激情综合| 正在播放亚洲一区| 国产一区二区在线免费观看| 欧美激情久久久| 久久久九九九九| 亚洲一区二区在线免费观看视频| 免费欧美日韩国产三级电影| 亚洲午夜精品在线| 亚洲欧洲日产国产综合网| 国产精品久久久久久久久久直播 | 在线成人激情黄色| 国产精品草草| 欧美激情影音先锋| 久久久久一区二区| 亚洲一区在线播放| 日韩视频在线免费| 欧美国产视频在线观看| 久久久www| 欧美亚洲在线视频| 亚洲一区二区在线| 亚洲免费高清视频| 亚洲精品日韩在线观看| 亚洲丶国产丶欧美一区二区三区| 国产精品亚洲视频| 欧美视频免费在线| 欧美日韩福利在线观看|