C 與Lua互動(二)

2021-06-10 12:40:09 字數 1144 閱讀 5619

c++與lua的之間函式的相互呼叫

1.c++調lua函式

c與lua的所有互動都是通過乙個棧來完成的。我對前面提到的虛擬機器l的理解是,它就是乙個棧(可能理解的不對)。然後通過對這個棧的操作來實現資料的互動。

呼叫函式跟訪問變數其實差不多,前面都是做一樣的事,只是呼叫函式時獲取的變數是函式名。然後將需要的引數逐一入棧,最好通過lua_call來呼叫函式。具體實現如下。

********test.lua*************

function add(x,y)

return x+y

endint main(int argc,char *argv)

int ret;

int x = 1;

int y = 2;

lua_state *l = lua_open();

lual_openlibs(l);

lual_dofile(l);

lua_getglobal(l,"add");    //將函式入棧

lua_pushnumber(l,x);  //變數x入棧

lua_pushnumber(l,y);   //變數y入棧

lua_call(l,2,1)      //2表示引數個數,1表示函式返回值的個數。因為lua可以返回多個值。 我的理解是將x,y出棧,計算函式值,並將函式值入棧。這時,函式值就在棧頂。

ret = lua_tonumber(l,-1)    //獲取棧頂元素,並出棧。-1表示對棧頂的偏移量為1。負數時對棧頂的偏移量,正數是對棧底的偏移量。如果返回的是字串就用lua_tostring。

lua_pop(l,1);   //將函式出棧

lua_close(l);

return 0;

2.lua調c++函式

lua要呼叫c的函式需要將c函式註冊到lua中。

int add(lua_state *l)

double sum = 0;

sum = lua_tonumber(l,-1) + lua_tonumber(l,-2);    //取棧頂兩元素,並相加

lua_pushnumber(l,sum);            //將結果返回給lua

return 0;

int main(int argc,char *argv)

C 與Lua互動(二)

我們搭建好了整個的專案環境,現在,我們一起探索一下如何將lua寄宿到c 中。我們在luawithcpptest專案下,檢視source.cpp 如下 include include using namespace std extern c void testlua int main void tes...

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