婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua教程(四):在Lua中調用C語言、C++的函數

Lua教程(四):在Lua中調用C語言、C++的函數

熱門標簽:武漢百應人工智能電銷機器人 上海企業外呼系統排名 百度地圖標注位置網站 400手機電話免費辦理 揚州電銷外呼系統軟件 如何利用高德地圖標注家 智能語音電銷的機器人 電腦外呼系統輻射大嗎 開通400電話申請流程

本教程將介紹如何在Lua里面調用c/c++函數。

在Lua里面調用c/c++函數其實是比較簡單,本文將通過兩個示例演示具體的做法:一個是求平均數,另一個是打印lua函數的一些參數信息。

最后,本文會介紹如何把這兩個函數定義成一個模塊,這樣lua代碼里面就可以不再使用全局的名字空間了。

前言

當我們需要在Lua里面調用c/c++函數時,所有的函數都必須滿足以下函數簽名:

復制代碼 代碼如下:

typedef int (*lua_CFunction) (lua_State *L);

換句話說,所有的函數必須接收一個lua_State作為參數,同時返回一個整數值。因為這個函數使用Lua棧作為參數,所以它可以從棧里面讀取任意數量和任意類型的參數。而這個函數的返回值則表示函數返回時有多少返回值被壓入Lua棧。(因為Lua的函數是可以返回多個值的)

示例一

定義C++函數指針

復制代碼 代碼如下:

int average(lua_State *L)
{
    // get number of arguments
    int n = lua_gettop(L);
    double sum = 0;
    int i;
    // loop through each argument
    for (i = 1; i = n; i++)
    {
        // total the arguments
        sum += lua_tonumber(L, i);
    }
    // push the average
    lua_pushnumber(L, sum / n);
    // push the sum
    lua_pushnumber(L, sum);
    // return the number of results
    return 2;
}

注冊此函數給Lua

復制代碼 代碼如下:

lua_register(L, "average", average);

Lua里面調用此函數

復制代碼 代碼如下:

avg, sum = average(10, 20, 30, 40, 50)
print("The average is ", avg)
print("The sum is ", sum)

示例二

定義C++函數

復制代碼 代碼如下:

int displayLuaFunction(lua_State *l)
{
    // number of input arguments
    int argc = lua_gettop(l);
    // print input arguments
    std::cout "[C++] Function called from Lua with " argc
              " input arguments" std::endl;
    for(int i=0; iargc; i++)
    {
        std::cout " input argument #" argc-i ": "
                  lua_tostring(l, lua_gettop(l)) std::endl;
        lua_pop(l, 1);
    }
    // push to the stack the multiple return values
    std::cout "[C++] Returning some values" std::endl;
    lua_pushnumber(l, 12);
    lua_pushstring(l, "See you space cowboy");
    // number of return values
    return 2;
}

注冊此Lua函數

復制代碼 代碼如下:

 // push the C++ function to be called from Lua
    std::cout "[C++] Pushing the C++ function" std::endl;
    lua_pushcfunction(L, displayLuaFunction);
    lua_setglobal(L, "displayLuaFunction");

注意,上一個示例,我們使用的是函數是

復制代碼 代碼如下:

lua_register(L, "average", average);

它其實只是一個宏定義,其實現也是上面兩個函數組成的。

在Lua里調用此函數

復制代碼 代碼如下:

io.write('[Lua] Calling the C functionn')
a,b = displayLuaFunction(12, 3.141592, 'hola')
-- print the return values
io.write('[Lua] The C function returned ' .. a .. '> and ' .. b .. '>\n')

實現一個Lua模塊

首先,我們把這兩個C函數封裝到一個數組里面:

復制代碼 代碼如下:

static const luaL_Reg mylibs[]=
{
    {"average", average},
    {"displayLuaFunction", displayLuaFunction},
    {NULL, NULL}
};

接下來,我們定義另一個C函數,讓它注冊我們的Lua模塊:

復制代碼 代碼如下:

int lua_openmylib(lua_State *L)
{
    luaL_newlib(L, mylibs);
    return 1;
};

這里的luaL_newlib會生成一個table,并把所有的mylibs里面的函數填充進去。最后,lua_openmylib返回值為1,表示會把剛剛生成的table壓入棧。

最后,我們像之前注冊Lua的標準庫一樣,注冊我們新的庫,并給它起名字為mylib:

復制代碼 代碼如下:

  static const luaL_Reg lualibs[] =
    {
        {"base", luaopen_base},
        {"io", luaopen_io},
        {"mylib", lua_openmylib},
        {NULL, NULL}
    };

此時,我們在Lua里面調用之前的兩個函數就需要帶上模塊名字前綴了:

復制代碼 代碼如下:

avg, sum = mylib.average(10, 20, 30, 40, 50)
a,b = mylib.displayLuaFunction(12, 3.141592, 'hola')

結語

注意:這里C函數參數里的Lua棧是私有的,每一個函數都有自己的棧。當一個c/c++函數把返回值壓入Lua棧以后,該棧會自動被清空。

您可能感興趣的文章:
  • Lua教程(二十):Lua調用C函數
  • Lua教程(三):C語言、C++中調用Lua的Table示例
  • C++中調用Lua函數實例
  • Lua中調用C++函數實例
  • Lua調用自定義C模塊
  • Lua中調用C語言函數實例
  • Lua教程(十九):C調用Lua
  • Lua編程示例(六): C語言調用Lua函數
  • C語言中調用Lua函數實例
  • C語言與Lua之間的相互調用詳解

標簽:張掖 新余 黑龍江 宜賓 武漢 延邊 江西 嘉峪關

巨人網絡通訊聲明:本文標題《Lua教程(四):在Lua中調用C語言、C++的函數》,本文關鍵詞  Lua,教程,四,在,中,調用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua教程(四):在Lua中調用C語言、C++的函數》相關的同類信息!
  • 本頁收集關于Lua教程(四):在Lua中調用C語言、C++的函數的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美男人的天堂一二区| 国产精品一区二区黑丝| 97精品久久久久中文字幕| 国产成人午夜精品影院观看视频| 久久成人综合网| 国产在线精品免费av| 不卡欧美aaaaa| 欧美在线观看18| 欧美刺激午夜性久久久久久久| 欧美精选一区二区| 精品国产污网站| 中文字幕亚洲在| 日本欧美一区二区三区乱码| 精品一区二区三区在线播放视频| 波多野结衣一区二区三区 | 日韩免费看的电影| 一区免费观看视频| 在线精品视频一区二区| 蜜乳av一区二区| 91电影在线观看| www成人在线观看| 洋洋成人永久网站入口| 久久国产精品色婷婷| 国产亚洲视频系列| 亚洲影院免费观看| 国产一区二区按摩在线观看| 日本一区二区三区免费乱视频| 午夜精品久久久久久久99水蜜桃| 国产成人亚洲综合a∨婷婷图片 | 欧美经典一区二区三区| 一级特黄大欧美久久久| 日韩无一区二区| 亚洲成在人线在线播放| 99精品视频一区二区| 日韩经典一区二区| 91精品国产综合久久国产大片| 亚洲激情男女视频| 成人精品视频一区二区三区| 国产亚洲一区二区在线观看| 欧美无人高清视频在线观看| 亚洲一卡二卡三卡四卡| 精品国产一区二区三区不卡 | 91麻豆国产精品久久| ㊣最新国产の精品bt伙计久久| 欧美久久久久久久久| 色欧美乱欧美15图片| 亚洲精品一卡二卡| 欧美极品少妇xxxxⅹ高跟鞋| 日韩一区二区视频| 欧美日韩在线电影| 亚洲国产cao| 91精品国产高清一区二区三区蜜臀 | 国产午夜三级一区二区三| 欧美日韩在线播放三区| 91麻豆免费观看| 色伊人久久综合中文字幕| 91原创在线视频| av在线不卡电影| 成人免费观看av| 成人精品gif动图一区| 粉嫩在线一区二区三区视频| 欧美激情中文不卡| 久久久精品国产99久久精品芒果 | 亚洲综合激情另类小说区| 精品久久久久久亚洲综合网| 欧美午夜视频网站| 久久国产综合精品| 麻豆精品视频在线| 精品夜夜嗨av一区二区三区| 日本aⅴ亚洲精品中文乱码| 91精品国产综合久久精品| 91成人免费网站| 欧美日韩综合色| 欧美日韩激情在线| 欧美一区二区在线不卡| 欧美大尺度电影在线| 日韩欧美的一区| 26uuu精品一区二区在线观看| 精品国产露脸精彩对白| 国产精品美女久久久久久久久久久 | 亚洲制服丝袜在线| 综合自拍亚洲综合图不卡区| 欧美性极品少妇| 欧美视频三区在线播放| 欧美精品在线观看播放| 91精品国产一区二区三区蜜臀 | 精品99一区二区三区| 日韩欧美美女一区二区三区| 久久蜜桃一区二区| 综合久久一区二区三区| 五月综合激情网| 国产在线不卡视频| 色噜噜狠狠色综合中国| 欧美日韩一二三区| 精品成a人在线观看| 亚洲欧美另类综合偷拍| 国产欧美一区二区三区鸳鸯浴| 日韩欧美色综合网站| 欧美国产日韩亚洲一区| 亚洲午夜精品一区二区三区他趣| 蜜臀av一级做a爰片久久| 成人国产在线观看| 欧美天天综合网| 日韩欧美国产不卡| 中文字幕制服丝袜成人av| 欧美一区午夜视频在线观看| 国产婷婷一区二区| 午夜精品一区二区三区三上悠亚 | 国产suv一区二区三区88区| 色婷婷综合久久久中文字幕| 日韩一级视频免费观看在线| 椎名由奈av一区二区三区| 久久国产精品露脸对白| 在线视频欧美区| 亚洲国产岛国毛片在线| 天使萌一区二区三区免费观看| 国产ts人妖一区二区| 日韩午夜激情免费电影| 一区二区三区电影在线播| 国产成人高清视频| 精品国精品自拍自在线| 婷婷中文字幕一区三区| 97久久超碰国产精品| 国产欧美日产一区| 久草精品在线观看| 91精品国产综合久久精品app | 国产.精品.日韩.另类.中文.在线.播放| 91香蕉视频mp4| 欧美国产日韩在线观看| 免费视频最近日韩| 8v天堂国产在线一区二区| 亚洲自拍偷拍麻豆| 日本韩国欧美在线| 亚洲欧美偷拍卡通变态| 91麻豆免费在线观看| 亚洲欧洲综合另类在线 | 成人av小说网| 国产无人区一区二区三区| 国产最新精品免费| 成人性生交大片| 久久久久免费观看| 国产麻豆视频精品| 久久久综合网站| 成人性生交大合| 亚洲欧美电影一区二区| 色国产综合视频| 亚洲国产精品一区二区www| 欧美性xxxxxxxx| 日韩成人dvd| 欧美不卡在线视频| 国产一区二区免费在线| 国产亚洲欧洲一区高清在线观看| 国产乱子轮精品视频| 国产精品人妖ts系列视频| 不卡视频在线看| 一区二区三区鲁丝不卡| 国产91高潮流白浆在线麻豆| 久久这里只精品最新地址| 国产综合色产在线精品| xnxx国产精品| 国产白丝精品91爽爽久久| 日韩码欧中文字| 欧美偷拍一区二区| 老司机午夜精品99久久| 国产三级三级三级精品8ⅰ区| 成人禁用看黄a在线| 亚洲国产wwwccc36天堂| 欧美tickle裸体挠脚心vk| 床上的激情91.| 亚洲国产aⅴ天堂久久| 日韩精品一区二区三区中文不卡| 国产黄色成人av| 亚洲午夜久久久久久久久电影院 | 久久99日本精品| 成人美女在线视频| 最新热久久免费视频| 欧美三级日韩在线| 久久成人免费网站| 亚洲桃色在线一区| 欧美大片拔萝卜| 99天天综合性| 日本欧洲一区二区| 亚洲人午夜精品天堂一二香蕉| 在线播放一区二区三区| 春色校园综合激情亚洲| 日韩不卡手机在线v区| 国产精品美女久久久久av爽李琼| 欧美老肥妇做.爰bbww视频| 激情久久五月天| 亚洲色图欧美激情| 26uuu色噜噜精品一区二区| 91福利视频久久久久| 成人精品在线视频观看| 紧缚奴在线一区二区三区| 亚洲一区二区不卡免费| 国产精品入口麻豆九色| 久久久精品影视| 精品久久久久香蕉网| 日韩欧美一级二级| 欧美猛男男办公室激情|