Lua與C++ 第五篇(C++調用Lua的函數)


本文轉載於:http://blog.csdn.net/musicvs/article/details/8451361

笨木頭花心貢獻,啥?花心?不呢,是用心~

正文:

 

經過前面幾章的介紹,相信大家對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++的函數~!

(旁白:這個我喜歡~!)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM