成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

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

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

前言

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

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

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

從一個最簡單的例子開始

一個GUI程序,從配置文件讀取窗口的大小,從而實現(xiàn)設置窗口的大小。下面我就寫一個基于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函數(shù),這個函數(shù)會將全局變量值壓入棧中,所以,width的值在索引為-2的位置,height的值在索引為-1的位置;接下來,就不用多說了。就是這樣。下載程序,運行一下,就OK了,修改代碼文件夾下的config.lua文件,看看運行結果。源代碼這里下載。

table操作

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

// 讀取全局的數(shù)據(jù)到棧中
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))
{
    // 如果不是實數(shù),就顯示錯誤信息
    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*系列函數(shù),將字段的值從棧中讀取出來。

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

復制代碼 代碼如下:

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

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

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

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

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

復制代碼 代碼如下:

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

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

調用Lua函數(shù)

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

復制代碼 代碼如下:

// 再來看看有參數(shù)和返回值得函數(shù)調用
// 現(xiàn)在在test.lua中定義了一個add函數(shù),計算兩個值的和,這兩個值就是用參數(shù)傳進去的
// 得到和以后,會返回這個和,現(xiàn)在我們就在C++這邊調用這個add函數(shù)
lua_getglobal(L, "add"); // 獲取函數(shù),壓入棧中
lua_pushnumber(L, 10); // 壓入第一個參數(shù)
lua_pushnumber(L, 20); // 壓入第二個參數(shù)
 
// 完成調用
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函數(shù):

復制代碼 代碼如下:

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

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

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

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

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

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

源代碼這里下載。

總結

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

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

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

巨人網絡通訊聲明:本文標題《Lua和C++語言的交互詳解》,本文關鍵詞  Lua,和,C++,語言,的,交互,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua和C++語言的交互詳解》相關的同類信息!
  • 本頁收集關于Lua和C++語言的交互詳解的相關信息資訊供網民參考!
  • 推薦文章
    日本fc2在线观看| 中文字幕在线二区| 国产在线观看一区二区三区| 成年人看的毛片| 国产夫妻自拍一区| 精品高清在线| 91精品一区二区| 欧洲一级视频| 亚洲污视频在线观看| 日本理论片午伦夜理片在线观看| xfav资源| 亚洲精品成人久久久| 麻豆视频在线播放| 好吊色欧美一区二区三区视频| 中文字幕99页| 天堂中文在线观看视频| 国产成a人亚洲精品| 欧美激情久久久| 国产欧美一区二区三区在线看| 日韩av片专区| 亚洲人成人一区二区在线观看| 99精品国产一区二区三区2021| 天天亚洲美女在线视频| 欧美日韩亚洲三区| 精品一区二区影视| 国产精品毛片在线看| av电影院在线看| 精品剧情在线观看| 国产精品毛片一区二区三区四区| 精品成人免费观看| 亚洲精品第一区二区三区| 一区二区三区国产| 国产女人免费看a级丨片| 肥熟一91porny丨九色丨| 午夜亚洲性色福利视频| 亚洲精品久久久久久久蜜桃| 久久精品视频中文字幕| 97在线精品视频| 一区二区三区精| 国产亚洲久一区二区| 亚洲在线偷拍自拍| 亚洲一二三av| av老司机在线观看| 2022国产精品视频| 99热国产免费| 自拍偷拍亚洲精品| 国产精品45p| 国产欧美自拍一区| 韩日在线播放| 国产黄网站在线观看| 日韩中文字幕影院| 奇米888一区二区三区| 国产欧美日韩亚洲精品| 精品在线免费观看视频| 国产精品劲爆视频| av国产精品| 亚洲天堂第二页| www.99riav| 欧美性猛交xxxx乱大交退制版| 国产老头老太做爰视频| 精品一区免费av| 成人app下载| 国产欧美日韩中文久久| 日日噜噜噜夜夜爽亚洲精品| 精品无人区一区二区三区| 极品人妻一区二区三区| 日本久久天堂| 99国产精品自拍| 久久综合九色综合97婷婷女人| 九一精品在线观看| 日韩人体视频一二区| 久久精品国产v日韩v亚洲| 色综合久久久888| 久久国产日韩欧美精品| 亚洲成人精品综合在线| 在线观看91视频| 红桃视频国产一区| 精品一区二区三区久久| 自拍日韩亚洲一区在线| 99热6这里只有精品| jizz18日本| 欧美性爽视频| 日本不卡一区二区三区在线观看| 国产无遮挡裸体免费久久| 久久国产精品久久久久| 尤物视频..com| 大地资源高清播放在线观看| 一区二区中文字幕在线观看| 亚洲综合精品伊人久久| 一本一本大道香蕉久在线精品| 国产精品久久久久影院| 久久99国产成人小视频| 26uuu亚洲婷婷狠狠天堂| 韩国成人精品a∨在线观看| 免费黄网站在线观看| 一个人看的视频www在线观看免费| 亚洲日本欧美天堂| 日本午夜大片a在线观看| 一区二区三区欧美成人| 久久品道一品道久久精品| 国产精品久久久久秋霞鲁丝| 欧美丰满老妇厨房牲生活| 国产欧美日韩高清| 99精品国产热久久91蜜凸| 亚洲精品乱码久久久久久按摩观| 在线免费黄网| 91香蕉亚洲精品| 亚洲人成欧美中文字幕| a黄色片在线观看| 久久精品网址| 都市激情亚洲色图| 国产日韩在线精品av| 日本视频在线免费| 亚洲一区二区三区在线播放| 中国人体摄影一区二区三区| 高清国语自产拍免费一区二区三区| 男人操女人在线观看| 日本资源在线| 欧美精品久久一区二区| 性色av蜜臀av色欲av| 国产免费一区二区三区| 亚洲国产精品专区久久| 国产精品成人一区二区不卡| 三级毛片在线免费看| 欧美视频官网| 六月婷婷激情网| 国产精品久久一级| 久久精品亚洲精品| 国产精品第一区| 亚洲一二三四久久| heisi视频网在线观看| 色呦呦网站一区| 国产又色又爽又黄又免费| 91久久精品久久国产性色也91| 日本一区二区成人在线| 91看片免费| 亚洲一区 欧美| h狠狠躁死你h高h| 一级欧洲av| 99re91这里只有精品| 亚洲精选一二三| 亚洲精品久久久久久久久久久久久| 91麻豆制片厂| 精品欧美一区二区精品久久| 色视频www在线播放国产| 欧美一区二区三区视频免费| 国产欧美日韩在线一区二区| 亚洲第一黄色网址| 91久久精品国产| 久久激情五月激情| 久久精品国产亚洲一区二区三区| 麻豆av在线播放| 中文字幕成人在线视频| 久久精品国产一区二区三区日韩| 久久www免费人成精品| 色多多视频在线播放| 91视频福利网| 亚洲一区三区电影在线观看| 在线免费激情视频| 五月婷婷狠狠操| 97国产精品人人爽人人做| 久久五月天色综合| 欧美精品久久久久a| 91豆花视频在线播放| 九色丨porny丨| 欧美在线视频播放| 日韩人体视频| jizz在线免费观看| 蜜臀精品久久久久久蜜臀| 亚洲欧美日本一区二区三区| 亚洲1区在线观看| 三年片观看免费观看大全视频下载| 在线不卡视频| 国产sm主人调教女m视频| 永久免费在线观看视频| 91麻豆精品国产91久久| 国产免费一区二区三区在线能观看| 少妇太紧太爽又黄又硬又爽| 国产精品亚洲美女av网站| 国产伦理一区二区| 亚洲丝袜美腿一区| 偷拍自拍亚洲| 99在线视频精品| 97久久久免费福利网址| 国产精品二区二区三区| 五月天婷婷综合| 99国产视频在线| 欧美熟妇激情一区二区三区| 好吊色一区二区三区| 日韩大片免费在线观看| 影院在线观看全集免费观看| 国产黄色大片在线观看| 在线观看国产福利| 人人妻人人澡人人爽精品日本| 久久青草国产手机看片福利盒子| 国产精品videossex国产高清| 欧美大胆视频| 国产精品视频导航| 在线观看国产精品淫| 国内久久精品| 日本三级黄色大片| 玖玖爱在线精品视频| 天天摸夜夜添狠狠添婷婷| www欧美xxxx| 国产精品成人免费| 日本三级中文字幕| 国产国语videosex另类| 久久精品香蕉视频| 久久老司机精品视频| 香蕉av福利精品导航| 中文字字幕在线中文乱码电影| 亚洲自拍欧美精品| 椎名由奈jux491在线播放| 日韩一级理论片| 久久国产视频网站| 狠狠狠色丁香婷婷综合激情| 一区二区不卡免费视频| 欧美不卡在线观看| 日本色护士高潮视频在线观看| 日韩三级在线| 日韩欧美主播在线| 日本在线成人一区二区| 国产精品私人影院| 日本电影免费看| 精品99一区二区三区| 98视频精品全部国产| 男人的天堂日韩| 国产51人人成人人人人爽色哟哟| 九九九久久久久久久| 99久久久精品视频| 成人免费无遮挡无码黄漫视频| 日日摸夜夜添夜夜添精品视频| 成年人免费av| 国产精品白丝jk喷水视频一区| 中文在线a√在线8| 综合久久av| 不卡中文字幕| 国产欧美日韩一级| 国产精品—色呦呦| 日韩国产欧美亚洲| 91精品麻豆日日躁夜夜躁| 中文在线免费二区三区| 欧美一级片久久久久久久| 国产精品xxxx喷水欧美| 欧美黄色免费在线观看| 亚洲欧美精品aaaaaa片| 成人性视频免费网站| 天天干天天干天天操| 天天综合网天天做天天受| yw.139尤物在线精品视频| 久久超级碰碰| 蜜桃视频成人| 久久久久中文字幕亚洲精品| 成人黄18免费网站| 日本精品一二区| 很黄很色网站| www.热久久| 一区二区激情小说| 日韩专区中文字幕| 免费高潮视频95在线观看网站| 国产探花在线精品一区二区| 中文字幕视频网站| 国产福利在线观看| 国产传媒在线播放| 一个人看的www视频在线免费观看| 紧缚捆绑精品一区二区| 青青草原av| 亚洲区精品久久一区二区三区| 日本一级大毛片a一| 欧美成人精品三级网站| 久久这里精品国产99丫e6| 91丨porny丨在线| 免费观看亚洲| 亚洲欧美电影在线观看| 亚洲成年网站在线观看| 视频一区二区三区免费观看| 日本黄色三级大片| 无码人妻aⅴ一区二区三区玉蒲团| 中文字幕+乱码+中文字幕一区| 一级全黄裸体免费视频| 久久网站免费视频| 色女人在线视频| 成人精品网站在线观看| 亚洲精品免费电影| 亚洲女人18毛片水真多| 国产精品2024| 成人午夜在线视频一区| 91精品国产乱码久久久久久蜜臀| 欧美福利影院| 人人超碰91尤物精品国产| 不卡的电视剧免费网站有什么| 欧美一级播放| 亚洲精品久久视频| 久久99国产精品免费网站| 蜜桃视频在线观看视频| 在线中文字幕第一页| 北条麻妃一区二区三区中文字幕| 三级免费网站| 亚洲同志网站入口| 欧美特黄a级高清免费大片a级| 啦啦啦中文在线观看日本| 亚洲国产另类久久精品| 国产校园另类小说区| 欧美一级电影免费在线观看| 欧美精品一区二区三区涩爱蜜| 奇米四色中文综合久久| 欧洲亚洲一区二区| 99热成人精品热久久66| 亚洲影视一区二区三区| 国产精品乱子乱xxxx| 亚洲一区二区中文| 国产日韩欧美一区二区三区四区| 日本电影亚洲天堂一区| 欧美伊人精品成人久久综合97| 国风产精品一区二区| asian性开放少妇pics| 欧美成人午夜电影| 久久嫩草精品久久久精品一| 中日韩在线观看视频| 欧美日韩免费| √天堂中文在线| 黄色亚洲大片免费在线观看| 国内精品久久久久影院一蜜桃| 国产一区二区三区影院| 欧美另类videosbest视频| 九色福利视频| 天天躁夜夜躁狠狠是什么心态| 久久精品国产一区二区|