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

來源:互聯網
上載者:User

到這為止,大家對Lua和C++之間的通訊應該有些熟悉了,今天我們來介紹最後一個操作。
(旁白:什嗎?最後一個?要結束了嗎?太好了~!)

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

1. Lua調用C++的函數

Lua要調用C++的函數還是蠻方便的,首先,我們來建立一個c++函數先:

複製代碼 代碼如下:

public:
  static int getNumber(int num);
  
  
int HelloLua::getNumber( int num ) {
    CCLOG("getNumber num = %d", num);
    return num + 1;
}

類的什麼的,我就忽略了,直接上函數。
(旁白:= =好懶!)
 
這是一個很簡單的函數,給出一個值,返回一個+1後的值。
現在,我們想在Lua中調用這個函數,得多寫一個函數。
(旁白:那個,為嘛getNumber函數是靜態?)
複製代碼 代碼如下:

public:
static int cpp_GetNumber(lua_State* pL);


int HelloLua::cpp_GetNumber( lua_State* pL ) {
    /* 從棧頂中取一個值 */
    int num = (int)lua_tonumber(pL, 1);

    /* 調用getNumber函數,將傳回值入棧 */
    lua_pushnumber(pL, getNumber(num));

    /* 傳回值個數,getNumber只有一個傳回值,所以返回1 */
    return 1;
}


(旁白:又是靜態!)
這是怎麼回事呢?我們很清楚,Lua和C++只能通過堆棧通訊,所以Lua是不可能直接調用getNumber函數的,所以我們建立一個cpp_GetNumber函數作為中介。
cpp_GetNumber函數有一個lua_State* pL參數,有了這個參數,c++就能從Lua的堆棧中取值了,剩下的都很簡單,不想過多的解釋…
 
還是解釋一下吧。
(旁白:你妹紙的,我就知道!)
 
1) 首先,Lua指令碼裡會調用cpp_GetNumber函數,至於為什麼能調用,一回解釋,我知道旁白一定會問的。(旁白:有種無力吐槽的感覺。。。)
2) 當cpp_GetNumber被調用時,一切又回到C++對Lua的操作了,棧頂裡會存放函數所需要的參數,取出來用就可以的。
3) Lua調用cpp_GetNumber之後,需要一個結果,當然,這個結果同樣只能存放在棧裡,所以理所當然地要把getNumber的結果入棧。
4) 最後,cpp_GetNumber return了一個值,這個值不是函數的執行結果,而是getNumber需要傳回值的個數(Lua支援多個傳回值的函數)
旁白,你明白了嗎?
(旁白:額。。。沒明白)
 
好,既然大家都明白了,我就不多說了~
(旁白:你妹紙的O O!)

2. 結束了

最後,關於Lua的教程,到此告一段落了,本來我還想寫寫LuaBind的教程的(非常強大!)。但是,寫教程是一件很耗時的工作,10分鐘能學會的知識,也許我要花2個小時才能誕生一篇教程。(旁白:好吧,所以大家多些支援他吧。。。)
 
不過,如果大家把這6篇教程吃透,然後再去用Lua在Cocos2d-x裡開發,就沒什麼大的難度了。(最好再去瞭解一下LuaBind)
或許,我以後會接著寫Lua的教程,而現在,我要繼續學習Cocos2d-x去了~因為寫教程的緣故(這兩周一直在寫狀態機器的教程以及Lua的教程),我停止了接近兩周的時間。得抓緊了~不能落後~
那麼,祝大家元旦快樂。
(旁白:你確定你元旦之後會發這篇教程嗎?)
 
然後,希望大家輕輕地動一下滑鼠,點一下“頂”~嘿嘿

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.