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