lua和C相互調(diào)用

lua可以通過(guò)與C函數(shù)相互調(diào)用來(lái)擴(kuò)展程序功能卖宠,在C中嵌入lua腳本既可以讓用戶(hù)在不重新編譯代碼的情況下修改lua代碼更新程序乍炉,也可以給用戶(hù)提供一個(gè)自由定制的接口抡锈,這種方法遵循了機(jī)制與策略分離的原則怜珍。在lua中調(diào)用C函數(shù)可以提高程序的開(kāi)發(fā)效率渡紫,lua與C的相互調(diào)用在工程中相當(dāng)實(shí)用到推。

lua和c之間的相互是通過(guò)一個(gè)抽象的棧來(lái)進(jìn)行交互的。



1. lua和c相互調(diào)用的api:

todo


2. 應(yīng)用

這種lua和c相互調(diào)用的方式惕澎,可以實(shí)現(xiàn)一下很方便的功能莉测。把lua腳本作為功能插件,配置化的植入到cpp的程序中唧喉。比如在游戲中捣卤,使用某個(gè)道具可以給角色加經(jīng)驗(yàn),可以把addexp(100)這段lua代碼作為配置八孝,當(dāng)使用道具的時(shí)候董朝,就通過(guò)cpp調(diào)用這段lua去執(zhí)行。 >完整實(shí)例代碼

int exec_buff(ACTOR * actor)
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    // 將指定的函數(shù)注冊(cè)為L(zhǎng)ua的全局函數(shù)變量干跛,其中第一個(gè)字符串參數(shù)為L(zhǎng)ua代碼
    // 在調(diào)用C函數(shù)時(shí)使用的全局函數(shù)名子姜,第二個(gè)參數(shù)為實(shí)際C函數(shù)的指針。
    lua_register(L, "addexp", addexp);

    lua_env_set(actor);

    // 在注冊(cè)完所有的C函數(shù)之后楼入,即可在Lua的代碼塊中使用這些已經(jīng)注冊(cè)的C函數(shù)了哥捕。
    if (luaL_dostring(L, actor->lua_str.c_str()))
    {
        printf("Failed to invoke.\n");
    }

    lua_env_unset();
    lua_close(L);
    printf("actor exec lua buff end \n");
    return 0;
}

int main()
{
    ACTOR * actor = new ACTOR();
    actor->lua_str = "addexp(100)";
    actor->exp = 5;
    actor->id = 10000;

    exec_buff(actor);
    return 0;
}

// g++  -g -I${dependencies_include_path}/lua-5.1.4/src -L ${dependencies_lib_path} -llua -Wl,-rpath=${dependencies_lib_path} 5.cpp -o test5

參考:
https://www.cnblogs.com/coderkian/p/4057750.html
https://juejin.cn/post/6995343033977798670

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浅辙,隨后出現(xiàn)的幾起案子扭弧,更是在濱河造成了極大的恐慌,老刑警劉巖记舆,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸽捻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)御蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)衣赶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厚满,你說(shuō)我怎么就攤上這事府瞄。” “怎么了碘箍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵遵馆,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我丰榴,道長(zhǎng)货邓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任四濒,我火速辦了婚禮换况,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盗蟆。我一直安慰自己戈二,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布喳资。 她就那樣靜靜地躺著觉吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骨饿。 梳的紋絲不亂的頭發(fā)上亏栈,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音宏赘,去河邊找鬼。 笑死黎侈,一個(gè)胖子當(dāng)著我的面吹牛察署,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峻汉,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贴汪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了休吠?” 一聲冷哼從身側(cè)響起扳埂,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘤礁,沒(méi)想到半個(gè)月后阳懂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年岩调,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巷燥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡号枕,死狀恐怖缰揪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葱淳,我是刑警寧澤钝腺,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赞厕,受9級(jí)特大地震影響艳狐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坑傅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一僵驰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唁毒,春花似錦蒜茴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至近零,卻和暖如春诺核,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背久信。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工窖杀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裙士。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓入客,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腿椎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桌硫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容