最近在學習 Lua 在 C# 上應用, 目前只學習到皮毛但也是記錄下來避免忘記。
C# Function 註冊到 Lua 使用, 在 C# 當中 Function 必須要是 Public 的。
lua.RegisterFunction("LuaPrint", null, typeof(Form1).GetMethod("print"));
這邊的LuaPrint是在Lua script上面可以使用的名稱, 而第2個通常是填入 已宣告的 class
意思是 我 new 一個新的 class 相關的變數, 再把這個 class 裏頭的 Function 註冊到 Lua 裏頭
這個 new 出來的 class 不需要是 static。而如果是使用上面那行方法去註冊 Function, 那就需要是靜態的。
但是在實作上發現有太多的功能需要去註冊根本會一直做苦勞, 一點都不聰明。後來就查到 NLua有提供可以直接把 Class 內部的 Function直接匯入
-- load dll namespace luanet.load_assembly("InsLibDotNet"); -- import Ins class in Lua AgilentOSC = luanet.import_type("InsLibDotNet.AgilentOSC"); ChamberModule = luanet.import_type("InsLibDotNet.ChamberModule"); DMMModule = luanet.import_type("InsLibDotNet.DMMModule"); EloadModule = luanet.import_type("InsLibDotNet.EloadModule"); FuncGenModule = luanet.import_type("InsLibDotNet.FuncGenModule"); MultiChannelModule = luanet.import_type("InsLibDotNet.MultiChannelModule"); PowerModule = luanet.import_type("InsLibDotNet.PowerModule"); -- Ins control flow _scope = AgilentOSC("TCPIP0::168.254.95.0::hislip0::INSTR"); _power = PowerModule(5);
以下這行是匯入 namespace
luanet.load_assembly("InsLibDotNet");
再來匯入 Class, AgilentOSC 這個聲明在Lua裡面也代表了一個 Class Name
AgilentOSC = luanet.import_type("InsLibDotNet.AgilentOSC");
以下記錄一個範例如何去使用跟Method
LuaRegister = luanet.import_type("InsLibDotNet.LuaRegister"); temp = LuaRegister(); -- new object in lua temp:LuaInsLib_Init(); -- call method in lua