在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繫結 的...