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

2021-10-07 07:31:21 字數 2169 閱讀 4520

#c#訪問lua中的全域性變數

###c#**

luaenv = new luaenv();

luaenv.dostring("require 'csharpcalllua'");

//獲取lua中的全域性變數

string name = luaenv.global.get("name");

print("name:" + name);

int hp = luaenv.global.get("hp");

print("hp:" + hp);

bool isalive = luaenv.global.get("isalive");

print("isalive:" + isalive);12

3456

78910

1112

###lua**

print("c#訪問lua中的全域性變數");

hp = 100;

name = "yuki"

isalive = true12

34###輸出

c#訪問lua中的全域性變數

name:yuki

hp:100

isalive:true12

34#對映到class

對lua中的table中的變數的修改不會影響到對映到的c#中的class中的字段,反之也是。

這個過程是值拷貝,如果class比較複雜代價會比較大。而且修改class的字段值不會同步到table,反過來也不會。

###c#**

luaenv = new luaenv();

luaenv.dostring("require 'csharpcalllua'");

//對映到class

print("對映到class");

irole role = luaenv.global.get("yuki");

print("name:" + role.name);

luaenv.dispose();

class role12

3456

78910

1112

1314

15###lua**

yuki = 12

3###輸出

before modify hp in c#

lua: hp in lua is 100

after modify hp in c#

lua: hp in lua is 10012

34#對映到inte***ce

類似對映到class,但是對映方式為引用。

c#**中訪問lua,需要在該inte***ce上新增 [csharpcalllua] 的特性,而lua**中訪問c#則需要在lua對應位置新增 [luacallcsharp] 的特性

###c#**

luaenv = new luaenv();

luaenv.dostring("require 'csharpcalllua'");

//對映到inte***ce

print("對映到inte***ce");

irole role = luaenv.global.get("yuki");

print("before modify hp in c#");

luaenv.dostring("print('hp in lua is ' .. yuki.hp)");

role.hp -= 10;

print("after modify hp in c#");

luaenv.dostring("print('hp in lua is ' .. yuki.hp)");

luaenv.dispose();

[csharpcalllua]

inte***ce irole

int hp

bool isalive }1

2345

6789

1011

1213

1415

1617

1819

2021

###lua**

yuki = 12

3###輸出

before modify hp in c#

lua: hp in lua is 100

after modify hp in c#

lua: hp in lua is 90

xLua C 訪問Lua之訪問Lua的table

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

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中的全域性function

這種是建議的方式,效能好很多,而且型別安全。缺點是要生成 如果沒生成 會拋invalidcastexception異常 delegate要怎樣宣告呢?對於function的每個引數就宣告乙個輸入型別的引數。多返回值要怎麼處理?從左往右對映到c 的輸出引數,輸出引數包括返回值,out引數,ref引數。...