xLua C 訪問lua中的全域性function

2021-10-23 20:44:21 字數 2500 閱讀 8289

這種是建議的方式,效能好很多,而且型別安全。缺點是要生成**(如果沒生成**會拋invalidcastexception異常)。

delegate要怎樣宣告呢?

對於function的每個引數就宣告乙個輸入型別的引數。

多返回值要怎麼處理?從左往右對映到c#的輸出引數,輸出引數包括返回值,out引數,ref引數。

引數、返回值型別支援哪些呢?都支援,各種複雜型別,out,ref修飾的,甚至可以返回另外乙個delegate。

delegate的使用就更簡單了,直接像個函式那樣用就可以了。

void

loadglobalfun1()

[

csharpcalllua

]public

delegate

void

fdelegate

(int a,

string b)

;void

loadglobalfun2()

public

class

dclass

[xlua.csharpcalllua

]public

delegate

intfdelegate2

(int a,

string b,

outdclass c)

;void

loadglobalfun3()

end

"; luaenv.

dostring

(script)

;fdelegate2 fun3 = luaenv.global.

get<

fdelegate2

>

("fun3");

dclass c;

debug.

log(

fun3(10

,"hh"

,out c));

}

[

csharpcalllua

]public

delegate

action

gete()

;void

loadglobalfun()

這種方式的優缺點剛好和第一種相反。

使用也簡單,luafunction上有個變參的call函式,可以傳任意型別,任意個數的引數,返回值是object的陣列,對應於lua的多返回值。

兩種過載方法:

object call(params object args) 描述:

以可變引數呼叫lua函式,並返回該呼叫的返回值。

string script =

@" function fun(a,b)

return a+b,a-b

endend ";

luaenv.

dostring

(script)

;luafunction fun = luaenv.global.

get<

luafunction

>

("fun");

object

objs = fun.

call(5

,15);

foreach

(object obj in objs)

object call(object args, type returntypes) 描述:

呼叫lua函式,並指明返回引數的型別,系統會自動按指定型別進行轉換

public

class

dclass

string script =

@" function fun(a, b)

print('a', a, 'b', b)

return 1,

end ";

luaenv luaenv =

newluaenv()

;luaenv.

dostring

(script)

;luafunction fun = luaenv.global.

get<

luafunction

>

("fun");

object

objs = fun.

call

(new

object

,new

type

);foreach

(object obj in objs)

debug.

log(objs[0]

);debug.

log(

(objs[1]

as dclass)

.f1)

;

xLua C 訪問Lua之訪問Lua的變數

在resources資料夾中新建乙個csharpcalllua.lua.txt檔案,定義幾個變數 i 10 str wwz isstu false void start lua的number型別對於c 的int,float,double的,如果型別不對,會返回0比如在lua中i 10.1,c 中in...

xLua C 訪問Lua之訪問Lua的table

1.對映到普通class或struct 定義乙個class,有對應於table的字段的public屬性,而且有無引數建構函式即可,比如對於可以定義乙個包含public int f1 public int f2 的class。這種方式下xlua會幫你new乙個例項,並把對應的字段賦值過去。table的...

XLua C 訪問Lua中的table的幾種方式

c 訪問lua中的全域性變數 c luaenv new luaenv luaenv.dostring require csharpcalllua 獲取lua中的全域性變數 string name luaenv.global.get name print name name int hp luaenv...