Lua 一些小知識(二)

2021-08-15 20:18:26 字數 1836 閱讀 1475

1)lua中訪問c#中的屬性跟方法

require "luanet"

luanet.load_assembly("system")

int32 = luanet.import_type("system.int32")

num=int32.parse(1234)--call the method in csharpclass

print("num is",num)

print(int32)

2)在c#中執行lua指令碼檔案,或者指令碼字串

在c#中編寫lua指令碼:

lua直譯器:

lua  lua=new lua();

宣告變數:

lua.dostring(str="siki是個傻孩子");

注:在c#中可以使用return返回lua中的值

例:lua.dostring(return str)//str是lua中的乙個變數名

執行檔案:

lua.dofile(lua檔名.lua)

注:lua語言的編碼格式是ansi否則在c#中會出錯

3)    把乙個c#方法註冊進lua的乙個全域性方法

把乙個c#方法註冊進lua中:

普通方法:

lua.registerfunction("在lua中顯示的方法名",註冊的物件,註冊的物件的方法)

例:lua.registerfunction("luafunction",obj,obj.gettype().getmethod("註冊的方法名"))

()");

靜態方法:

lua.registerfunction("在lua中顯示的方法名",null,typeof(靜態物件).getmethod("靜態方法名"))

例:lua.registerfunction("luastaticfunction",null,typeof(myclass).getmethod("註冊的靜態方法名")

()");

4)在lua中使用c#**:

require:   // 引入c#中的動態鏈結庫

注:luanet要放在c#工程的輸出目錄下

5)在lua中訪問c#的屬性跟方法

lua**中,訪問c#物件的屬性的方式和訪問table的鍵索引一樣,比如obj.name 或者 obj["name"]

lua**中,訪問c#物件的普通函式的方式和呼叫table的函式一樣,比如obj:method1()

注:特殊情況---lua中訪問c#中的方法  特殊情況

當函式中有out或ref引數時,out引數和ref引數和函式的返回值一起返回,並且呼叫的時候,out引數不需要傳入

c#函式定義

class obj

int outmethod2(int parameter1,ref parameter2)

}當有過載函式的時候,呼叫函式會自動匹配第乙個能匹配的函式

可以使用get_method_bysig函式得到c#中指定類的指定引數的函式用法

luamethod = get_method_bysig(obj,"csharpmethod","system.string")

luamethod("abc")

6)lua註冊c#中事件委託(event delegate)

在lua中通過add方法或者remove方法把乙個lua的函式註冊或者登出從c#中的事件委託中

function method()

endobj.someevent:add(methodname(不用帶引號))

Lua 一些小摘要(一)

一。lua的一些小語法 1.lua中每一條語句後沒有分號 2.string的定義可以用雙引號 也可以用單引號 3.宣告整形 age 100 字串宣告 name zxf 宣告bool flag false 4.變數的命名不能以數字開頭,盡量不要用下劃線加大寫字母開頭,推薦c 命名法 5.單行注釋 注釋...

一些小知識

1.答 int elev 10 0.5 10 3答 arctoolbox中有直接的工具!data management tools features feature to polygon 4如何用arcgis實現指定範圍的dem水平切面 主要是想實現dem和水面結合的三維效果 但如何計算水面範圍 答...

QProcess一些小知識

1.啟動外部程式的兩種方式 1 一體式 void start 外部程式啟動後,將隨主程式的退出而退出 2 分離式 void startdetached 外部程式啟動後,當主程式退出時並不退出。而是繼續執行。2.當程式路徑中含有空格的時候,特別是windows系統該程式路徑會無法被識別。解決方法是將程...