(C#)(NLua) Lua 在 C#當中使用及交互

最近在學習 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
  • Add to Phrasebook
     
    • No word lists for English → Traditional Chinese...
       
    • Create a new word list...
  • Copy

posted on 2021-02-20 17:46  OO程式猿  阅读(1388)  评论(0编辑  收藏  举报

导航