在Lua脚本内引入C# dll:luanet.load_assembly('NLuaTestDll')
在Lua脚本内引入C# 定义的类:TestClass=luanet.import_type('NLuaTestDll.TestClass')
将C#对象导入到Lua脚本:_luaEnv["xxx"] = xxx
将C#中定义的方法导入Lua脚本:
var method = typeof(xLuaForm).GetMethod("StaticMethod");
_luaEnv.RegisterFunction("StaticMethod", null, method);
执行脚本后获取Lua内变量:_luaEnv["xxx"]
cs
public void Print(string msg)
{
MessageBox.Show(msg);
}
private Lua _luaEnv;
public xLuaForm()
{
InitializeComponent();
_luaEnv = new Lua();
_luaEnv.LoadCLRPackage();
//_luaEnv.RegisterLuaClassType(typeof(Person), typeof(Person));
}
public static void StaticMethod(string msg)
{
MessageBox.Show(msg);
}
private void simpleButton1_Click(object sender, EventArgs e)
{
//_luaEnv.DoString("require 'CSharpCallLua'");
var script = $@"
luanet.load_assembly('NLuaTestDll')
TestClass=luanet.import_type('NLuaTestDll.TestClass')
Person=luanet.import_type('NLuaTestDll.Person')
import(""System.Windows.Forms"")
MessageBox.Show('hello001')
local newForm = Form()
newForm:ShowDialog();
newForm:Dispose();
person = Person()
person.Name = 'Winter'
person.Age = 10
StaticMethod(person:ToString())
participant = {{""张三"", ""李四"", ""老王"", ""狗蛋"", ""铁剩""}}
StaticMethod('abc')
--require 'CSharpCallLua'
--person = {{Name = 'Tom', Age = 10}}
name = 'jerry'
form.Text = 'lua test'
form:Print('hello ' .. #participant)
function add(a, b)
return a+b
end
";
_luaEnv["form"] = this;
var method = typeof(xLuaForm).GetMethod("StaticMethod");
_luaEnv.RegisterFunction("StaticMethod", null, method);
_luaEnv.DoString(script);
var person = _luaEnv["person"] as Person;
MessageBox.Show(person.Name);
var addFun = _luaEnv.GetFunction("add");
var resObj = addFun.Call(10, 20);
}
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NLuaTestDll
{
public class TestClass : IFoo1
{
public int foo()
{
return 101;
}
}
public interface IFoo1
{
int foo();
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string ToString()
{
return $"{Name} -- {Age}";
}
}
}