C++中調用Lua函數執行個體_Lua

來源:互聯網
上載者:User

唉,今天心情有點糟糕,我就少說一些囉嗦的話了。
(旁白:太好了…)

上一章傳送門:http://www.jb51.net/article/55096.htm

經過前面幾章的介紹,相信大家對Lua的堆棧已經比較熟悉了,如果還不是很熟悉的朋友,建議多看幾遍前面的教程,或者多敲幾次代碼。

那麼,如果已經對Lua的堆棧比較熟悉,接下來的內容就很簡單了。

今天我們來看看C++如何調用Lua的函數,先看看現在Lua檔案是什麼樣的:

複製代碼 代碼如下:

-- helloLua.lua檔案
myName = "beauty girl"

helloTable = {name = "mutou", IQ = 125}

function helloAdd(num1, num2)
 return (num1 + num2)
end;


我們看到多了個helloAdd函數,那麼,現在我們要用C++調用這個函數。
(旁白:肯定又要用到getglobal了,每次都有它~!= =)
 
直接上代碼了:
複製代碼 代碼如下:

/* C++調用lua的函數 */
void HelloLua::demo3() {
    lua_State* pL = lua_open();
    luaopen_base(pL);

    /* 執行指令碼 */
    luaL_dofile(pL, "helloLua.lua");

    /* 把helloAdd函數對象放到棧中 */
    lua_getglobal(pL, "helloAdd");

    /* 把函數所需要的參數入棧 */
    lua_pushnumber(pL, 10);
    lua_pushnumber(pL, 5);

    /*
        執行函數,第一個參數表示函數的參數個數,第二個參數表示函數傳回值個數 ,
        Lua會先去堆棧取出參數,然後再取出函數對象,開始執行函數
    */
    lua_call(pL, 2, 1);

    int iResult = lua_tonumber(pL, -1);
    CCLOG("iResult = %d", iResult);
}


簡單說明一下步驟:
1) 執行指令碼(旁白:我就知道你會說廢話。。。)
2) 將helloAdd函數放到棧中:lua_getglobal(pL, “helloAdd”) 。(旁白:看吧,我就知道~!)
3) helloAdd有2個參數,我們要把參數傳遞給lua,所以2個參數都要放到棧裡。
4) 第2和第3步已經把函數所需要的資料都放到棧裡了,接下來只要告訴lua去棧裡取資料,執行函數~! 調用lua_call即可,注釋已經很詳細了,這裡就不重複了。
(旁白:太簡單了點吧,反正不管做什麼事情,把東西丟到棧裡,然後從棧裡取東西,就OK了~你可以滾了,以後教程我來寫,你負責吐槽~)
 
來,大家忽略旁白,教程什麼的還是我來寫比較好,主要是,吐槽這工作,不符合我的身份~
(旁白:…我有種被打擊了的感覺)
 
本章到此結束,很簡單吧?~

下一章我們介紹在Lua中調用C++的函數~!
(旁白:這個我喜歡~!)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.