【COCOS2DX-LUA 指令碼開發之十一】C/C++與Lua之間進行資料函數互動以及解決“PANIC: unprotected error in call to Lua API (attempt t

來源:互聯網
上載者:User

本站文章均為 李華明Himi 原創,轉載務必在明顯處註明:(作者新浪微博: @李華明Himi ) 
轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/lua1/1343.html 

          ☞ 點擊訂閱 ☜ 本部落格最新動向!及時將最新博文通知您!


                 

在使用Cocos2d-x 時候,難免需要C/C++調用Lua函數、資料或Lua調用C/C++函數,那麼本篇講詳細介紹C/C++與Lua之間的資料、函數互動。

首先讓我們來簡單瞭解幾個Lua API函數:

int   luaL_dofile (lua_State *L, const char *filename)  :

載入並運行指定檔案,沒有錯誤返回0

void  lua_settop (lua_State *L, int index):

參數允許傳入任何可接受的索引以及 0 。 它將把堆棧的棧頂設為這個索引。 如果新的棧頂比原來的大,超出部分的新元素將被填為 nil 。 如果 index 為 0 ,把棧上所有元素移除。

void   lua_getglobal (lua_State *L, const char *name):

把全域變數 name 裡的值壓入堆棧。

void   lua_pop (lua_State *L, int n):

從堆棧中彈出 n 個元素。相當於清除!

void   lua_pushstring (lua_State *L, const char *s):

把指標 s 指向的以零結尾的字串壓棧。 Lua 對這個字串做一次記憶體拷貝(或是複用一個拷貝), 因此 s 處的記憶體在函數返回後,可以釋放掉或是重用於其它用途。 字串中不能包含有零字元;第一個碰到的零字元會認為是字串的結束。

更多的API請參考:http://www.codingnow.com/2000/download/lua_manual.html

瞭解了以上幾個函數,為了方便童鞋們使用,Himi直接貼出封裝好的類 HclcData,其中主要包括如下幾個功能:

1. C/C++ 調用 Lua 全域變數

2. C/C++ 調用 Lua 全域Table 某元素

3. C/C++ 調用 Lua 全域Table

4. C/C++ 調用 Lua 函數

5. Lua 調用C/C++ 函數

 

下面直接貼出代碼:HclcData.h

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

聯繫我們

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