Lua與VC的互動

2021-07-08 17:27:30 字數 1680 閱讀 8615

1、從c讀取lua檔案:

lua_state *l = lual_newstate();

luaopen_base(l);

int ret=lual_dofile(l,"111.lua");

console::writeline("open ret=\n",ret);

lua_resume(l,0);

2、讀取乙個單獨的變數

111.lua中有: aa=3

lua_getglobal(l,"aa");       //將aa讀出來放到堆疊頂部

int s=lua_tointeger(l,-1);   //從堆疊頂部讀取數字

console::writeline("top=,s} 

3、讀取一維陣列

111.lua中有:tb1=

lua_getglobal(l,"tb1");

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

lua_getfield(l,-2,"y");

lua_getfield(l,-3,"z");

int a=lua_tointeger(l,-1);

int b=lua_tointeger(l,-2);

int c=lua_tointeger(l,-2);

console::writeline("top=,,",a,b,c);

4、讀取二維陣列

111.lua中有tb2=,}

其中,level是key,後面兩個是資料

lua_getglobal(l,"tb2");  //將tb2讀出放到棧頂

lua_pushnumber(l,1);     //指定讀取tb2的第1行(如果要讀第2行請將這裡的1改為2),並將此行放到堆疊頂端,此時tb2在堆疊中變成了-2位置,所以下面一行取表時用的是-2

lua_gettable(l,-2);     //從堆疊中-2行取出tb2放到堆疊頂端(-1位置)

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

lua_getfield(l,-2,"y");

int s=lua_tointeger(l,-1);

int t=lua_tointeger(l,-2);

console::writeline("top=,",s,t);

5、連續迴圈讀取陣列中的多個元素

lua_settop(l,0);

lua_getglobal(l,"tb2");

lua_pushnumber(l,1); //壓入key:第一行

lua_gettable(l,-2);

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

lua_getfield(l,-2,"y"); //得到第一行的兩個數字

int s=lua_tointeger(l,-1);

int t=lua_tointeger(l,-2);

console::writeline("top=,",s,t);

lua_pop(l,3);//把棧頂三行:兩個數字和乙個table彈掉,然後重新壓入key和table,得到新的一行。

lua_pushnumber(l,2); //壓入key:第二行

lua_gettable(l,-2);

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

lua_getfield(l,-2,"y"); //得到第二行的兩個數字

其他行照此類推。

Lua與C C 的互動

lua 從 取得 luatinker 可以從 取得 tolua 可以從 取得 關於lua與c c 的互動 c c 呼叫lua的函式還是比較簡單的,可以參考lua tinker的實現。lua呼叫c c 的函式如果用最原始的方式有很大限制,只能呼叫型別為 typedef int lua cfunctio...

lua與C C 的互動

基於vs的lua原始碼,位址為 lua作為小巧精悍的指令碼語言,易於嵌入c c 中 廣泛應用於遊戲ai 實際上在任何經常變化的邏輯上都可以使用lua實現,配合c c 實現的底層介面服務,能夠大大降低系統的維護成本。下面對lua和c c 的互動呼叫做乙個例項分析 lua提供了api用於在c c 中構造...

C 與Lua的互動

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