午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Lua和C++語言的交互詳解

Lua和C++語言的交互詳解

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

前言

寫過Windows程序的人都知道,對于應用程序,如果需要在本地保存一些配置信息,我們經常將這些配置信息寫在注冊表或者本地的配置文件中,很多應用都是將一些配置信息寫在配置文件中,比如以ini結尾的文件,這種配置文件很多,使用的很廣泛,然后應用程序在啟動的時候,就會解析這個配置文件,讀取一些配置信息。

Lua的一項重要用途就是作為一種配置語言。而這篇文章將結合Lua來擴展應用程序,這種方式提供了更大的靈活性和便利性。

這篇博文主要總結的是使用C++和Lua進行交互,涉及到獲取Lua中普通變量的值,Lua中table的值和調用Lua中的函數。下面就開始吧。

從一個最簡單的例子開始

一個GUI程序,從配置文件讀取窗口的大小,從而實現設置窗口的大小。下面我就寫一個基于MFC的窗體程序來完成這個功能。點擊這里去下載完成代碼工程。我把重點的代碼貼出來:

復制代碼 代碼如下:

bool CLuaConfig::LoadConfig()
{
    L = luaL_newstate();
    if (!L)
    {
        return false;
    }
 
    // 加載配置文件
    int bRet = luaL_loadfile(L, pConfigFile);
    if (bRet)
    {
        return false;
    }
    // 運行配置文件
    bRet = lua_pcall(L, 0, 0, 0);
    if (bRet)
    {
        return false;
    }
 
    // 讀取高
    lua_getglobal(L, "width");
    lua_getglobal(L, "height");
 
    // width
    if (!lua_isnumber(L, -2))
    {
        return false;
    }
 
    // height
    if (!lua_isnumber(L, -1))
    {
        return false;
    }
    iWindowHeight = lua_tointeger(L, -1);
    iWindowWidth = lua_tointeger(L, -2);
    return true;
}

luaL_newstate就不說了,用爛了;luaL_loadfile用于加載一個lua文件,然后調用lua_pcall運行編譯好的程序塊,lua_pcall是在保護模式下運行Lua代碼,也就是說,出錯了,lua_pcall會返回一個錯誤代碼,并不會直接crash。當運行完程序塊后,調用了兩次lua_getglobal函數,這個函數會將全局變量值壓入棧中,所以,width的值在索引為-2的位置,height的值在索引為-1的位置;接下來,就不用多說了。就是這樣。下載程序,運行一下,就OK了,修改代碼文件夾下的config.lua文件,看看運行結果。源代碼這里下載。

table操作

在Lua中,對于table這種bug一樣存在的東西,如果C API無法操作table,那我們還能不能愉快的玩耍了。讓我們來看看C API如何操作table。現在有如下Lua語句:

復制代碼 代碼如下:

background = {r = 0.3, g = 1, b = 0.5}

那么,C API如何讀取這段代碼,將其中的每個字段都解析出來呢。我先把代碼貼上來,然后一句一句的分析:

復制代碼 代碼如下:

// 讀取全局的數據到棧中
lua_getglobal(L, "background");
if (!lua_istable(L, -1))
{
    // 如果不是table,就顯示錯誤信息
    cout "It's not a table." endl;
    return 0;
}
 
// 讀取table中字段的值,將值壓入棧中
lua_getfield(L, -1, "r");
 
// 讀取棧中的值
if (!lua_isnumber(L, -1))
{
    // 如果不是實數,就顯示錯誤信息
    cout "It's not a number." endl;
    return 0;
}
 
double fValue = lua_tonumber(L, -1);
cout "r => " fValue endl;

原諒我省略了luaL_newstate這樣的代碼。好了,讀取一個table,同讀取一個全局的變量是一個道理的。分為以下幾步:

1.使用lua_getglobal讀取這個變量,將table讀取到棧中;
2.使用lua_getfield讀取table中字段的值,將字段的值讀取到棧中;
3.使用lua_to*系列函數,將字段的值從棧中讀取出來。

這是讀取table的操作,那設置table的操作呢?我們可以將我們自己的值寫入到棧中,這該怎么操作?看代碼:

復制代碼 代碼如下:

// 將需要設置的值設置到棧中
lua_pushnumber(L, 0.55);
 
// 將這個值設置到table中
lua_setfield(L, -2, "r");

就是上面兩行代碼,當然了,你也需要先使用lua_getglobal讀取table變量,將table讀取到棧中,然后按照上面的兩行代碼進行設置就OK了。上面兩行代碼的具體含義是什么呢?

1.lua_push*系列函數是將一個需要設置的新值放到棧中;

2.lua_setfield函數同lua_getfield是一個性質的函數,只不過這里是set語義,將lua_push*到棧中的值,設置到table對應的key中。

現在讀取table,設置table都說了,那如何在表中完全創建一個新的table呢?我們有這種需求。怎么辦?

復制代碼 代碼如下:

// 創建一個新的table,并壓入棧
lua_newtable(L);
 
// 往table中設置值
lua_pushstring(L, "https://www.jb51.net"); // 先將值壓入棧
lua_setfield(L, -2, "website"); // 將值設置到table中
 
// 再設置一個值
lua_pushstring(L, "果凍想 | 一個原創文章分享網站");
lua_setfield(L, -2, "description");

我將重要的幾行代碼貼上來了,最重要的就是一個lua_newtable函數,該函數會創建一個新的table,并將這個table置于棧中,接下來就和上面設置table的值是一樣的。源代碼下載一、下載二。 

調用Lua函數

是的,你沒有看錯,你可以在一lua文件中定義一個函數,然后在C++中調用這個函數,貌似“高大上”的感覺。現在我就來說說這個“高大上”的功能;習慣性的上代碼:

復制代碼 代碼如下:

// 再來看看有參數和返回值得函數調用
// 現在在test.lua中定義了一個add函數,計算兩個值的和,這兩個值就是用參數傳進去的
// 得到和以后,會返回這個和,現在我們就在C++這邊調用這個add函數
lua_getglobal(L, "add"); // 獲取函數,壓入棧中
lua_pushnumber(L, 10); // 壓入第一個參數
lua_pushnumber(L, 20); // 壓入第二個參數
 
// 完成調用
iRet = lua_pcall(L, 2, 1, 0);
if (iRet)
{
    const char *pErrorMsg = lua_tostring(L, -1);
    cout pErrorMsg endl;
    lua_close(L);
    return 0;
}
 
// 獲得計算結果
iRet = lua_isnumber(L, -1);
if (!iRet)
{
    cout "Error occured." endl;
    lua_close(L);
    return 0;
}
 
double fValue = lua_tonumber(L, -1);
cout "Result is " fValue endl;

上面代碼是調用以下lua函數:

復制代碼 代碼如下:

-- 有參數,有返回值
function add(iA, iB)
    return iA + iB
end

這個簡單的Lua函數沒有任何講的地方,說說上面的那一長段C++代碼吧。在Lua中,函數和普通的值是一樣的,所以,C++調用Lua中的函數,分為以下幾步:

使用lua_getglobal來獲取函數,然后將其壓入棧;

如果這個函數有參數的話,就需要依次將函數的參數也壓入棧;

這些準備工作都準備就緒以后,就調用lua_pcall開始調用函數了,調用完成以后,會將返回值壓入棧中;

最后取返回值得過程不用多說了,調用完畢。

源代碼這里下載。

總結

到此這篇文章總結完畢,總共花費4天的業余的零碎時間,時間主要花費在demo的編寫上,好了,這篇文章獻上,希望對大家有幫助。如果你覺的還不錯,可以將這篇文章分享給更多的朋友。當然了,你也可以掃描頁面右側的二維碼資助我寫出更好的文章了,那定是極好的。

您可能感興趣的文章:
  • Lua和C/C++互相調用實例分析
  • C++利用LuaIntf調用Lua的方法示例
  • Lua中調用C++函數示例
  • 使用Lua來擴展C++程序的方法
  • 把Lua函數傳遞到C/C++中實例
  • C++與Lua交互原理實例詳解

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

巨人網絡通訊聲明:本文標題《Lua和C++語言的交互詳解》,本文關鍵詞  Lua,和,C++,語言,的,交互,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua和C++語言的交互詳解》相關的同類信息!
  • 本頁收集關于Lua和C++語言的交互詳解的相關信息資訊供網民參考!
  • 推薦文章
    国产伦精品一区二区三毛| 在线播放一区二区三区| 精品一区二区国语对白| 成人欧美一区二区三区在线| 免费看的黄色录像| 萌白酱国产一区二区| 来吧亚洲综合网| 欧美一区二区三区四区在线观看| 国产乱码一区二区三区四区| 欧美日韩亚洲一区二区| 国产精品丝袜视频| 国产成人精品亚洲午夜麻豆| 欧美α欧美αv大片| www.四虎精品| 国产高清在线观看视频| 亚洲午夜久久久久| 色之综合天天综合色天天棕色| 五月激情四射婷婷| 日本午夜激情视频| 波多野结衣加勒比| 国产成人在线播放视频| 日本人妻熟妇久久久久久| 精品综合免费视频观看| 国产精品一区二区在线观看不卡 | 日本在线视频播放| 亚洲欧洲免费视频| 亚洲精品日韩一| 欧美一区二区激情视频| 国产精选在线观看91| 国产一区在线观看视频| 欧美日韩亚洲综合一区二区三区激情在线 | 亚洲bt天天射| 五月婷婷欧美激情| 中文字幕中文乱码欧美一区二区| 亚洲jizzjizz日本少妇| 综合久久久久久| 自拍亚洲欧美老师丝袜| 黄色一区二区三区| 在线观看成人免费| 狠狠色狠狠色综合| 国产日韩专区在线| 国产精品视频在线观看免费| 精品夜色国产国偷在线| 免费日韩在线视频| 久久精品福利视频| 国产精彩视频在线| 亚洲国产精品久久久久秋霞蜜臀 | 男人添女人下面高潮视频| 激情文学综合插| 欧美精品在线观看91| 8x8x最新地址| 久国产精品韩国三级视频| 欧美在线一区二区三区| 国产精品久久久久av| 久久久精品视频在线| 欧洲精品在线一区| 日韩免费黄色片| 原创真实夫妻啪啪av| 欧美日韩最好看的视频| 欧美亚洲国产精品| 色狠狠综合天天综合综合| 欧美黑人性猛交xxx| 久久精品99久久久香蕉| 视频一区视频二区中文字幕| 国产免费黄色av| 一本大道久久a久久综合 | 日韩大片免费在线观看| 影音先锋日韩有码| 99在线精品视频免费观看软件| 中文国产在线观看| 亚洲av无码一区二区三区性色| 国产精品久久久久久久99| 成人在线国产精品| 国产精品久久久久av免费| 成人444kkkk在线观看| 日韩精品一区二区三区在线| 日本丶国产丶欧美色综合| 天天综合天天干| 99三级在线| 日韩免费一区二区| 精品国产av一区二区| 亚洲欧洲日夜超级视频| 亚洲激情av在线| 免费一级全黄少妇性色生活片| 免费黄色在线视频| 91国内在线视频| 亚洲欧美电影院| 国产成人麻豆精品午夜在线| 欧美综合第一页| 一区二区三区在线免费| 久久久久久久久久成人| 日韩欧美第二区在线观看| 国产精品成人免费精品自在线观看| 国产123在线| 最近中文字幕无免费| 爱情岛论坛亚洲自拍| 欧美大尺度做爰床戏| 欧美 日韩 亚洲 一区| 国产不卡av在线| 午夜视频在线观看一区二区三区| 亚洲精品成人电影| 91看片破解版| 性欧美精品一区二区三区在线播放 | 蜜桃av久久久亚洲精品| 亚洲欧美日韩国产中文在线| 永久免费未满蜜桃| 青青艹视频在线| 91视频8mav| 91麻豆精品国产91| 国产欧美日韩三级| 日韩特黄一级片| theporn国产精品| 91视频国产高清| 制服丝袜国产精品| 毛片av中文字幕一区二区| 国产特级黄色大片| 亚洲精品国产精品国产自| 喷水一区二区三区| 人妻丰满熟妇av无码区app| 欧美视频在线观看一区二区| 全部毛片永久免费看| 亚洲最大成人免费视频| 欧美肥妇毛茸茸| 欧美一区二区三区成人片在线| 国产精品免费在线播放| 日韩欧美999| 中文字幕第31页| 青草青青在线视频| 欧美性xxxxx| 国产乱子轮精品视频| 内射后入在线观看一区| 亚洲最大成人av| 亚洲天堂av片| 稀缺呦国内精品呦| 91九色极品视频| 国产精品色一区二区三区| 国产免费中文字幕| 日韩av一区二区在线| 成人黄色免费片| 亚洲综合色区另类av| 黄色一级视频免费观看| 国产91在线高潮白浆在线观看| 一区二区三区在线视频观看58| 亚洲狼人综合网| 久久精品香蕉视频| 亚洲免费电影一区| 国产一区二区在线看| 日韩av加勒比| 日本免费久久高清视频| 香港成人在线视频| 天天综合天天色| 美女少妇一区二区| 国产精品国产亚洲精品看不卡15| 亚洲福利电影网| 午夜av免费观看| 免费一级做a爰片久久毛片潮| 国产不卡一区二区在线观看| 精品久久一区二区三区| 国产视频亚洲色图| 色婷婷av国产精品| 久久撸在线视频| 精品欧美国产一区二区三区不卡| 国产婷婷色综合av蜜臀av| 国产午夜精品久久久久久免费视 | 91精品在线观| 亚洲成人网在线观看| 国产精品免费丝袜| 天天操天天干天天爱| 国产欧美在线观看一区| 四虎成人在线播放| 国产精品亚洲天堂| 成人听书哪个软件好| 亚洲欧美精品一区二区三区| 成人黄色a级片| www.555国产精品免费| 伦伦影院午夜理论片| 五月天av网站| 日本在线免费观看| 91久久精品无码一区二区| av免费观看在线| 麻豆国产一区二区| 99国内精品久久| 亚洲综合免费观看高清完整版在线| 亚洲视频小说图片| 在线免费av一区| 精品久久人人做人人爱| 久久精品国产亚洲精品| 5566日本婷婷色中文字幕97| 亚洲jizzjizz日本少妇| 欧美久久电影| 可以免费观看av毛片| 国产精品第七页| 亚洲精品男人的天堂| 日韩国产高清在线| 91麻豆国产自产在线观看| 日韩欧美在线视频| 亚洲欧美国产va在线影院| 久久久女女女女999久久| 国产在线精品一区| 在线免费视频a| 国精品人伦一区二区三区蜜桃| 最近免费中文字幕大全免费版视频| 国产精品一级视频| av在线这里只有精品| 日本韩国一区二区| 久久午夜a级毛片| 久久综合伊人77777麻豆| 91n.com在线观看| 国产精品7777777| 韩国av一区二区三区| 日韩欧美主播在线| 欧美精品手机在线| 亚洲欧美国产精品桃花| 成年人网站免费看| 亚洲免费成人在线| 亚洲精品国产品国语在线app| 国产一区二区三区久久精品| 国产伦精品一区二区三区四区免费| 杨幂毛片午夜性生毛片| www.国产一区二区| 国产日韩欧美精品在线| 亚洲色图欧美制服丝袜另类第一页| 91在线免费网站| 一二三av在线| 亚洲精品无码久久久| 午夜精品久久久久久久99水蜜桃| 久久综合久久八八| 久久人妻无码一区二区| 久久9999久久免费精品国产| 国产一区二区导航在线播放| 欧美成人乱码一区二区三区| 国产精品高潮呻吟久久av野狼| 欧美 日韩 国产在线观看| 一级片视频在线观看| 久久久久国产成人精品亚洲午夜| 亚洲天堂影视av| 99久re热视频精品98| 国产精彩视频在线| 欧美激情一区在线观看| 久久资源免费视频| 亚洲中文字幕无码不卡电影| 亚洲一级特黄毛片| 天天影视色香欲综合网老头| 国产精品日韩一区| 中文视频在线观看| 国产不卡视频一区| 久久精品电影网站| 成人在线激情网| 无码国产精品高潮久久99| 欧美精选在线播放| 亚洲精品日韩成人| 最新中文字幕免费| 91国偷自产一区二区开放时间| 国产高清自拍一区| 久久久久亚洲av无码专区 | 深田咏美在线x99av| 久久精品久久久久久久| 欧洲精品在线观看| 午夜精品一区二区在线观看| 婷婷激情五月综合| 亚洲综合一二区| 97人人模人人爽视频一区二区| 成年人一级黄色片| 午夜精品久久久久久久久| 久久综合伊人77777麻豆| 中文字幕人成人乱码亚洲电影| 欧美日韩免费在线视频| 欧美中文字幕在线观看视频 | 国产精品第九页| 欧美视频一区二区三区…| 日韩亚洲不卡在线| 亚洲av无码一区二区乱子伦| 亚洲视频综合网| 国产综合内射日韩久| 亚洲免费av在线| 无码免费一区二区三区免费播放 | 色中文字幕在线观看| 99这里有精品视频| 国产午夜精品理论片a级探花| 中文字幕 91| 久久久久久99久久久精品网站| 99九九电视剧免费观看| 波多野结衣激情视频| 亚洲欧美成人网| 亚洲制服丝袜在线播放| 福利微拍一区二区| 欧美一区二区三区四区在线观看地址| 一级黄色在线观看| 欧美国产极速在线| 久久亚洲精品大全| 欧美不卡一二三| www.五月天色| 综合电影一区二区三区 | 91欧美一区二区三区| 中文字幕在线观看不卡| 久久大片网站| 久久一二三区| 国产成人福利视频| 久久久精品人妻一区二区三区四| 亚洲国产成人91精品| 亚洲一区二区三区无码久久| 欧美亚男人的天堂| 久久6免费视频| 精品欧美一区二区三区| 乱子伦视频在线看| 亚洲国产成人porn| 自拍偷拍 国产| 亚洲欧美日韩中文播放| 国产3p露脸普通话对白| 99久久免费精品高清特色大片| 日韩电影大全在线观看| 国产麻豆精品theporn| 国产专区一区二区三区| 蜜桃视频免费观看一区| 欧美一区二区三区四区夜夜大片 | 一区二区自拍偷拍| 欧美高清视频一区二区| av首页在线观看| 57pao精品| 日本中文字幕一区| 精品无人区一区二区三区竹菊 | 欧美一区免费视频| 99久久国产综合精品麻豆| 国内精品国产三级国产99| 国产欧美精品一区二区三区四区 | 国产精品一区二区av| 17c精品麻豆一区二区免费| 免费黄色在线网址| 日韩精品中文字| 久久夜靖品2区| 久久久久久com| 天天综合网在线观看| 蜜桃成人在线| 亚洲成人精品影院| 男人添女人荫蒂国产| 精品国产自在久精品国产| 中文字幕 日韩有码| 国产欧美欧洲在线观看| 国产一区二区三区在线观看免费| 国产日本欧美在线| 一区二区三区四区av| 亚洲麻豆一区二区三区| 在线观看免费高清视频97| www精品国产| 亚洲欧美日本国产有色| 亚洲美女免费视频| 中文字幕成人动漫| 久久综合88中文色鬼| 二区三区在线视频| 亚洲欧美成人一区| 精品久久久一区二区| 久久久久久久毛片| 国产成人精品网站| 久久免费美女视频| av小说在线观看| 欧美中在线观看| 国产欧美日韩综合精品一区二区 | 精品嫩草影院久久| 中文字幕av影视| 久久综合精品一区| 欧美日韩国产页| 国产精品第5页| 久久婷婷人人澡人人喊人人爽| 亚洲国产一区二区三区青草影视| 91大神福利视频| 国产精品69久久| 亚洲精品写真福利| 国产极品国产极品| 欧美国产一二三区| 欧美中文字幕一区二区三区亚洲| 91视频免费网址| 日本日本精品二区免费| 欧美日韩国产区一| 国产日韩欧美久久| 色综合老司机第九色激情| 久久先锋资源网| 久久久久亚洲av无码专区体验| 久久66热这里只有精品| 91九色最新地址| 国精品人妻无码一区二区三区喝尿| 免费在线观看的毛片| 久久久这里只有精品视频| 久久精品日韩一区二区三区| 午夜偷拍福利视频| 青少年xxxxx性开放hg| 尤物tv国产一区| 欧美经典一区二区| 国产精品熟女视频| 内射国产内射夫妻免费频道| 日韩在线一区二区三区免费视频| 国产精品萝li| 天堂av资源在线| 一级全黄裸体片| 国产在线观看一区| 欧美性一区二区| 国产不卡视频一区二区三区| 特级西西www444人体聚色| 国产 日韩 欧美在线| 91亚洲人电影| 久久激情视频久久| 在线精品视频一区二区三四| 久久中文娱乐网| 国产xxxx孕妇| 久久网一区二区| 波多野结衣 在线| 亚洲久久中文字幕| 最新av在线免费观看| www 成人av com| 97精品久久久| 国产一区二区三区四区福利|