C/C++與Lua之間進行資料函式互動以及解決“PANIC: unprotected error in call to Lua API (attempt t
在使用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 處的記憶體在函式返回後,可以釋放掉或是重用於其它用途。 字串中不能包含有零字元;第一個碰到的零字元會認為是字串的結束。
瞭解了以上幾個函式,為了方便童鞋們使用,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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
//
//
HclcData.h
//
CppLua
//
//
Created by Himi on 13-4-17.
//
|