Lua和C 互動 全域性陣列互動

2021-09-13 03:00:40 字數 1380 閱讀 5246

①陣列是key值從1開始並連續遞增的table。

②索引號是從1開始,不是從0開始。

lua還提供了一些只針對陣列進行操作的api,如下:

①lualib_api lua_integer (lual_len) (lua_state *l, int idx);

lual_len 使用於陣列,可得到陣列元素個數;

以數字形式返回給定索引處值的「長度」; 它等價於在 lua 中呼叫 '#' 的操作。(非陣列使用#將得不到正確的值)

②lua_api int (lua_rawgeti) (lua_state *l, int idx, lua_integer n);

lua_rawgeti 獲取索引號n的陣列值,返回的int值為值的型別。

這是一次直接訪問,不會觸發元方法,效率高。

③lua_api void  (lua_rawseti) (lua_state *l, int idx, lua_integer n);

lua_rawseti 設定索引號n的陣列值。

這個函式會將值彈出棧。 賦值是直接的;即不會觸發元方法,效率高。

建立乙個array.lua,lua檔案會在c++載入

global_c_read_array = 

if global_c_write_array then

for i = 1, #global_c_write_array do

print("v = ", global_c_write_array[i])

endend

建立乙個lua5.cpp

#include using namespace std;

extern "c"

static int get_array(lua_state *l)

else if (lua_isnumber(l, -1))

} else if (ret_type == lua_tstring)

lua_pop(l, 1);

} /* 返回返回值的個數 */

return 0;

}static int set_array(lua_state *l)

int main(int argc, char *ar**)

當讀取lua中陣列時,執行

//相當於lua_loadfile和lua_pcall,載入並執行lua檔案

lual_dofile(l, "array.lua");

get_array(l);

當寫入lua中陣列時,執行

set_array(l);

lual_dofile(l, "array.lua");

Lua和C 的互動

step1 搭建好vs和lua相互動的環境 2.有lua lib.lib這個檔案 3.開始配置 滑鼠放在工程名那 右鍵選屬性 位址就選上面有原始碼的檔案路徑。如上,把引用目錄點開進行編輯位址是選lib檔案的位址 如上,吧庫目錄點開進行編輯位址也是lib檔案的位址 step2 給這個工程新增標頭檔案 ...

Lua和C如何互動 一

要理解lua和c的互動,先要理解堆疊和全域性表兩個概念 lua和c c 語言互動的主要方法是乙個無處不在的虛擬棧,棧的特點是先進後出.lua的全域性表可以想象成乙個map雜湊表結構,比如lua有乙個變數 name hello world 全域性表中存放了name和hello world的對應關係,可...

C 與Lua互動(二)

c 與lua的之間函式的相互呼叫 1.c 調lua函式 c與lua的所有互動都是通過乙個棧來完成的。我對前面提到的虛擬機器l的理解是,它就是乙個棧 可能理解的不對 然後通過對這個棧的操作來實現資料的互動。呼叫函式跟訪問變數其實差不多,前面都是做一樣的事,只是呼叫函式時獲取的變數是函式名。然後將需要的...