lua與C互動函式

2021-09-28 18:40:20 字數 2502 閱讀 1150

在lua中,lua堆疊就是乙個struct,堆疊索引的方式是正數也可以是負數,區別是:正數索引1永遠表示棧低,負數索引-1永遠表示棧頂。

棧頂

4 ------------- -1

3 ------------- -2

2 ------------- -3

1 ------------- -4

棧底

lua_gettop (lua_state *l)返回棧頂索引(即棧長度)

lua_settop(lua_state * l, int index)將棧頂設定為乙個指定的位置

修改棧中元素的數量。如果值比原棧頂高,則高的部分nil補足,如果值比原棧低,則原棧高出的部分捨棄,所以可以用lua_settop(0)來清空棧。

接受兩個引數,乙個型別為lua_alloc,另乙個是void*,lua_alloc 定義乙個lua_alloc的函式指標型別,其返回值為void

詳解lual_newstate()

lual_loadfile載入乙個lua檔案

lua_pcall執行編譯好的程式塊

lua_getglobal將全域性變數值壓入棧中

lua_to*將字段的值從棧中讀取

lua_push*將乙個需要設定的值放到棧中

lua_getfield讀取table中字段的值,並將值壓入棧中

-- 讀取全域性的資料到棧中

lua_getglobal(l, "background");

--讀取table中字段的值,將值壓入棧中

lua_getfield(l, -1, "r"

);

lua_setfield將某個值設定到table中

--將需要設定的值設定到棧中

lua_pushnumber(l, 0.55)

; --將這個值設定到table中

lua_setfield(l, -2, "r"

);

lua_pushcfunction(l, functionname)將函式放入棧中

示例

--hello.lua

str =

"i am so cool"

table =

function add(a,b)

return a+b

end

void main(

) //2.載入lua檔案

int bret = lual_loadfile(l,"hello.lua");

//3.執行lua檔案

bret = lua_pcall(l,0,0,0)

; //4.讀取變數

lua_getglobal(l,"str");

//5.讀取table

lua_getglobal(l,"table");

lua_getfield(l,-1,"name");

//6.讀取函式

lua.getglobal(l,"add"

);//獲取函式,壓入棧中

lua.pushnumber(l,10)

;//壓入第乙個引數

lua.pushnumber(l,20)

;//壓入第二個引數

int iret = lua_pcall(l,2,1,0)

;//呼叫函式,呼叫完以後,會將返回值壓入棧中,2表示引數個數,1表示返回值個數

//至此,棧中情況

// 棧頂

// 索引 型別 值

//----------------------------------------

// 4 int: 30

// 3 string: zhang

// 2 table: table

// 1 string: i am so cool

//-----------------------------------------

// 棧底

}

lua和c++互動

在lua中,lua堆疊就是乙個struct,堆疊索引的方式是正數也可以是負數,區別是:正數索引1永遠表示棧低,負數索引-1永遠表示棧頂。

C 與Lua互動(二)

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

C 與Lua的互動

c 呼叫lua用 luainte ce.dll lua呼叫c 用luanet.dll 他們之間的互動主要就是靠這兩個庫檔案,需要把渣兩個檔案剛到vs工程下的debug資料夾下。using luainte ce using system using system.collections.generic...

C 與Lua互動原理

具體步驟 1,找到cocos自帶的繫結工具指令碼檔案genbindings.py,在cocos工程的frameworks cocos2d x tools tolua這個目錄下,把這個檔案開啟。2,在開啟的genbindings.py檔案下面找到這麼一段 這裡就是執行這個指令碼會自動生成lua繫結 的...