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

兔子的技術博客

兔子

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  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>
            久久久久久穴| 欧美日韩1区| 欧美黑人在线观看| 亚洲社区在线观看| 99国产精品国产精品久久| 久久久99国产精品免费| 夜夜嗨av一区二区三区免费区| 在线成人h网| 国产亚洲欧美日韩美女| 欧美午夜不卡| 国产精品视频网址| 国产精品久久久久久久午夜| 欧美精品久久99| 欧美成人激情视频免费观看| 久久精品成人一区二区三区| 午夜一区二区三视频在线观看| 亚洲一区日韩| 在线视频精品一区| 亚洲电影专区| 久久综合久久综合久久| 老司机免费视频一区二区三区| 久久国产精品久久久| 欧美在线首页| 久久久午夜电影| 欧美激情在线狂野欧美精品| 亚洲国产一成人久久精品| 亚洲另类在线一区| 亚洲精品国产精品国自产在线| 久久久久久久综合色一本| 快射av在线播放一区| 欧美激情精品久久久久久大尺度| 亚洲精品一区二区三区蜜桃久| 一本大道av伊人久久综合| 亚洲欧美视频在线观看视频| 欧美中文在线观看国产| 久久综合狠狠| 国产精品久久97| 国产日韩一区在线| 欧美性猛交xxxx乱大交蜜桃| 国内精品久久久久久久影视麻豆| 伊人久久av导航| 一卡二卡3卡四卡高清精品视频| 亚洲欧美日韩在线| 欧美xxx成人| 亚洲一区免费观看| 在线观看91久久久久久| 日韩视频在线一区二区| 日韩小视频在线观看专区| 亚洲精品免费一二三区| 欧美一区网站| 蜜臀99久久精品久久久久久软件| 欧美理论电影在线观看| 国产一区二区高清| 99精品久久久| 久久一区二区三区四区五区| 日韩一区二区精品视频| 久久亚洲免费| 欧美日韩一二三四五区| 欧美精品免费观看二区| 国产色产综合产在线视频| 亚洲精品一区二区三区四区高清| 久久精品国产亚洲一区二区| 日韩一级片网址| 欧美成人福利视频| 激情欧美一区二区三区| 午夜在线视频观看日韩17c| 欧美在线视频观看| 一区二区三区产品免费精品久久75| 久久久亚洲人| 狠狠色丁香婷婷综合久久片| 午夜日韩激情| 亚洲一区黄色| 国产精品免费看| 亚洲一区二区高清视频| 亚洲精品久久久久久久久久久| 久久精品色图| 国产一区二区三区自拍| 久久成人免费视频| 亚洲女同精品视频| 国产精品专区第二| 性色av一区二区三区| 国产精品99久久久久久久女警 | 欧美成人中文字幕| 国内久久视频| av成人免费观看| 麻豆精品视频在线观看视频| 亚洲精选在线观看| 欧美日韩一区二区在线| 亚洲精选一区| 亚洲精品资源| 欧美性感一类影片在线播放| 亚洲午夜精品国产| 一区二区免费看| 亚洲一区二区三区涩| 欧美激情偷拍| 亚洲在线国产日韩欧美| 亚洲男人天堂2024| 国内精品久久久久影院薰衣草| 久久久久久久网| 久久精品欧美| 亚洲国产精品成人久久综合一区| 免费久久99精品国产自在现线| 亚洲深夜影院| 国产色产综合产在线视频| 久久精品中文| 老司机免费视频久久| 亚洲精品视频在线播放| 亚洲开发第一视频在线播放| 国产精品久久久久久久一区探花| 一区二区三区视频观看| 亚洲一区二区免费视频| 极品日韩av| 99精品国产在热久久婷婷| 国产精品毛片在线| 狂野欧美性猛交xxxx巴西| 美女啪啪无遮挡免费久久网站| 在线精品视频一区二区| 一本色道久久加勒比精品| 欧美精品一区在线发布| 亚洲欧美日本日韩| 久久青草福利网站| 在线亚洲+欧美+日本专区| 亚洲美女精品一区| 国产一区二区av| 日韩亚洲欧美成人| 伊人影院久久| 在线亚洲欧美专区二区| 精品成人在线| 亚洲综合国产| 国产综合久久久久久鬼色| 欧美激情网站在线观看| 久久久久亚洲综合| 欧美亚洲视频在线观看| 欧美欧美全黄| 亚洲国产欧美一区二区三区同亚洲 | 亚洲欧美日韩一区在线| 欧美国产三区| 欧美大片在线看| 亚洲高清av在线| 免费短视频成人日韩| 免费短视频成人日韩| 激情视频一区| 久久国产精品一区二区三区四区 | 欧美一区二区在线播放| 欧美午夜一区二区| 中文久久乱码一区二区| 欧美一区三区二区在线观看| 国产精品久久久久毛片大屁完整版 | 亚洲午夜性刺激影院| 国产精品v片在线观看不卡| 亚洲午夜精品一区二区三区他趣| 亚洲专区欧美专区| 国产午夜精品视频免费不卡69堂| 亚洲影院在线观看| 久久在线免费视频| 亚洲黄色高清| 欧美系列电影免费观看| 欧美一区二区精品在线| 欧美国产第二页| 亚洲在线不卡| 亚洲高清不卡在线观看| 欧美日韩一区二区视频在线观看| 亚洲欧美电影在线观看| 美国十次成人| 亚洲视频在线看| 一区国产精品| 国产精品久久久久999| 欧美成人首页| 亚洲欧美不卡| 亚洲电影专区| 国产精品久久7| 免费久久精品视频| 亚洲综合电影| 亚洲精品一区二区三区99| 久久九九久精品国产免费直播| 亚洲国产精品久久人人爱蜜臀 | 91久久精品国产91久久| 国产精品视频久久久| 久久久视频精品| 亚洲视频综合| 最近中文字幕日韩精品| 亚久久调教视频| 亚洲日本欧美| 黄色一区二区在线观看| 国产精品福利在线观看| 麻豆九一精品爱看视频在线观看免费 | 国产精品一区二区欧美| 免播放器亚洲一区| 午夜欧美理论片| 夜夜嗨av一区二区三区| 免费观看一区| 久久先锋影音| 欧美中文字幕精品| 亚洲永久免费观看| av不卡在线观看| 日韩一区二区精品视频| 亚洲高清不卡一区| 揄拍成人国产精品视频| 国产日本精品| 国产日韩久久|