在VS2012中實(shí)現(xiàn)lua與C++的相互調(diào)用

分步驟總結(jié)一下在做這樣一個(gè)小實(shí)例的過程中進(jìn)行的工作和遇到的問題准谚。
參考博客:
lua和c語言互相調(diào)用的例子
VS2012建立調(diào)用lua腳本工程

Lua環(huán)境

首先需要配置一下Lua語言環(huán)境尘盼,下載Lua的解釋器

示例中我使用的是Lua 5.1版本

Lua5.1

新建和配置C++工程

在VS2012中新建一個(gè)“Win32 控制臺(tái)應(yīng)用程序”耙册。

然后配置頭文件目錄
右鍵單擊項(xiàng)目->屬性->VC++目錄
包含目錄中添加Lua5.1中的include文件夾的路徑狡恬,因?yàn)樵贑++中需要包含這個(gè)目錄下的頭文件虚缎。

然后添加依賴庫
右鍵單擊項(xiàng)目->連接器->輸入
附加依賴項(xiàng)中添加Lua5.1中l(wèi)ib目錄下的lib51.lib文件路徑蚣旱。這是執(zhí)行l(wèi)ua腳本必不可少的庫钦购。

編寫C++代碼

在主函數(shù)(win32平臺(tái)下,主函數(shù)名為_tmain)所在的cpp文件中編寫如下代碼:

// TestCppLua.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)都许。
//

#include "stdafx.h"
#include <stdio.h>

//包含lua相關(guān)頭文件
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

//添加一個(gè)C++語言函數(shù)
int add(lua_State* L)
{
    //從lua狀態(tài)機(jī)的棧中取出索引為1的int型數(shù)值
    int x = luaL_checkint(L, 1);
    //從lua棧中取出索引為2的int型數(shù)值
    int y = luaL_checkint(L, 2);
    printf("result:%d + %d = %d\n", x, y, x + y);
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    lua_State* L = luaL_newstate();     //新建一個(gè)lua狀態(tài)機(jī)
    luaL_openlibs(L);   //打開相關(guān)的庫
    lua_pushcfunction(L, add);  //將c++函數(shù)add入棧
    lua_setglobal(L, "ADD");    //設(shè)置全局符號(hào)ADD
    //加載lua腳本文件稻薇,這里使用了需要執(zhí)行的Lua腳本文件的絕對(duì)路徑
    if (luaL_loadfile(L, "E:\\TestProj\\TestCppProj\\TestCppLua\\TestCppLua\\myLua.lua"))
    {
        printf("error in load lua file.");
    }
    //執(zhí)行一次腳本,生成function
    lua_pcall(L, 0, 0, 0);
    //將lua函數(shù)myfunction入棧
    lua_getglobal(L, "myfunction");
    //執(zhí)行腳本胶征,執(zhí)行function
    lua_pcall(L, 0, 0, 0);

    printf("Lua is done.");
    getchar();
    return 0;
}

編寫Lua腳本

新建了一個(gè)myLua.lua文件塞椎,在文件中寫下如下的代碼:

-- 定義一個(gè)myfunction函數(shù)
function myfunction()
    print("in myLua")
    ADD(1, 2)   -- 調(diào)用ADD函數(shù)
    ADD(100, 200)
end

運(yùn)行這個(gè)實(shí)例

在VS2012中,調(diào)試我的win32控制臺(tái)應(yīng)用程序睛低。在配置好包含目錄和依賴庫的情況下案狠,代碼一次編譯通過
調(diào)試窗口如圖:

調(diào)試窗口

運(yùn)行過程總結(jié)

在C++中
1.定義一個(gè)add函數(shù)。
2.新建一個(gè)Lua狀態(tài)機(jī)暇昂。
3.打開lua相關(guān)庫莺戒。
4.函數(shù)add入棧伴嗡,并設(shè)置全局變量ADD來表示C++中的add函數(shù)急波,可以在lua腳本中使用ADD來訪問C++中的add函數(shù)。
5.加載lua腳本文件瘪校。
6.執(zhí)行一次腳本澄暮,如果不執(zhí)行,則lua腳本中定義的全局函數(shù)myfunction不會(huì)存在阱扬。
7.將lua腳本中的函數(shù)myfunction入棧泣懊。
8.再執(zhí)行腳本,即會(huì)執(zhí)行myfunction函數(shù)麻惶。

在Lua中
1.定義一個(gè)myfunction函數(shù)馍刮。在myfunction函數(shù)中調(diào)用全局函數(shù)ADD(這個(gè)函數(shù)實(shí)際是在C++代碼中添加到Lua狀態(tài)機(jī)中的)。

深入學(xué)習(xí)

看懂了上述過程窃蹋,理解了C++調(diào)用Lua腳本的基本過程之后可以來看看這篇博客
Lua和C++交互詳細(xì)總結(jié)

通過這篇博客可以更深入了解C++與Lua語言的配合使用卡啰。感謝以上幾位博主。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末警没,一起剝皮案震驚了整個(gè)濱河市匈辱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杀迹,老刑警劉巖亡脸,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡浅碾,警方通過查閱死者的電腦和手機(jī)大州,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來及穗,“玉大人摧茴,你說我怎么就攤上這事」÷剑” “怎么了苛白?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焚虱。 經(jīng)常有香客問我购裙,道長,這世上最難降的妖魔是什么鹃栽? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任躏率,我火速辦了婚禮,結(jié)果婚禮上民鼓,老公的妹妹穿的比我還像新娘薇芝。我一直安慰自己,他們只是感情好丰嘉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布夯到。 她就那樣靜靜地躺著,像睡著了一般饮亏。 火紅的嫁衣襯著肌膚如雪耍贾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天路幸,我揣著相機(jī)與錄音荐开,去河邊找鬼。 笑死简肴,一個(gè)胖子當(dāng)著我的面吹牛晃听,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砰识,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼能扒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仍翰?” 一聲冷哼從身側(cè)響起赫粥,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎予借,沒想到半個(gè)月后越平,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體频蛔,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年秦叛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晦溪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挣跋,死狀恐怖三圆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情避咆,我是刑警寧澤舟肉,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站查库,受9級(jí)特大地震影響路媚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜樊销,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一整慎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧围苫,春花似錦裤园、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至周循,卻和暖如春强法,著一層夾襖步出監(jiān)牢的瞬間万俗,已是汗流浹背湾笛。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闰歪,地道東北人嚎研。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像库倘,于是被迫代替她去往敵國和親临扮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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