把C#中的全局方法注册到Lua中,,代码如下:
class Program
{
static void Main(string[] args)
{
//把类中的一个普通方法注册到lua中去
Lua lua = new Lua(); //创建lua对象
Program thisPro = new Program(); //创建要注册方法所在类的对象
//注册普通方法 参数(注册方法所在的路径,所在类的对象,类的反射)
lua.RegisterFunction("MyFunc", thisPro, thisPro.GetType().GetMethod("MyFunc"));
//通过lua对象调用方法查看是否注册成功
lua.DoString("MyFunc()");
//把类中的静态方法注册进去
lua.RegisterFunction("MyStaticFunc", null, typeof(Program).GetMethod("MyStaticFunc"));
lua.DoString("MyStaticFunc()");
Console.ReadKey();
}
//普通方法
public void MyFunc()
{
Console.WriteLine("这是C#的一个普通方法:MyFunc");
}
//静态方法
public static void MyStaticFunc()
{
Console.WriteLine("这是C#中的静态方方法:MyStaticFunc");
}
}
在Lua中使用C#中的类,此lua文件是在程序集的Debug目录下
require "luanet" --注意luanet.dll 和lua文件需要在同一目录下
luanet.load_assembly("LuaIntfaceDemo") --先获取程序集
Program = luanet.import_type("LuaIntfaceDemo.Program") --获取C#的类
print(Program)
--然后既可直接调用静态方法
Program.MyStaticFunc()
--非静态的方法需要实例化对象后调用
newprogram = Program()
newprogram:MyFunc()
在VS中使用文件的方式调用,查看效果:
using System;
using LuaInterface;
namespace LuaIntfaceDemo
{
class Program
{
static void Main(string[] args)
{
把类中的一个普通方法注册到lua中去
Lua lua = new Lua(); //创建lua对象
lua.DoFile("test.lua");
Console.ReadKey();
}
//普通方法
public void MyFunc()
{
Console.WriteLine("这是C#的一个普通方法:MyFunc");
}
//静态方法
public static void MyStaticFunc()
{
Console.WriteLine("这是C#中的静态方方法:MyStaticFunc");
}
}
}