lua调用c#

1.1 下载LuaInterface   

         下载地址:http://files.luaforge.net/releases/luainterface/luainterface

1.2.解压下载好的压缩包,将luanet.dll文件拷贝进工程目录下bin/Debug文件夹下,把LuaInterface.dll复制到工程目录下,然后        添加引用LuaInterface.dll

2.编写lua文件(编码格式应为ANSI),即用记事本编辑,名称为aaa.lua,保存后缀为.lua,保存在工程bin/Debug文件夹下

require "luanet"
--加载C#命名空间
luanet.load_assembly("System")
--导入C#命名空间中的类,得到命名空间System中的Int32类的对象
Int32=luanet.import_type("System.Int32")
Lua中使用C#中的类创建对象的时候,会自动匹配最合适的构造方法

3.在vs下调用lua脚本,需要引入命名空间using LuaInterface

Lua lua = new Lua();
        lua.DoFile("aaa.lua");
        Console.ReadKey();
 

在Lua中访问C#自定义的类中的属性和方法

C#文件

namespace test
{
    class Program
    {
        public string name = "wang";
        public void TestMethod()
        {
            Console.WriteLine("TestMethod");
        }
        static void Main(string[] args)
        {
            Lua lua = new Lua();
            lua.DoFile("aaa.lua");
            Console.ReadKey();
        }
    }
}

lua文件

require "luanet"
--加载C#命名空间
luanet.load_assembly("test")
--导入C#命名空间中的类
Program=luanet.import_type("test.Program")

program1 = Program()
--打印C#中Program的字段
print(program1.name)
--调用C#中Program的方法
program1:TestMethod()

特殊情况——out、ref关键字

C#脚本

namespace test
{
    class Program
    {
        public void TestOut(string name, out int count)
        {
            Console.WriteLine(name);
            count = name.Length;
        }
        public void TestRef(string name,ref int count)
        {
            Console.WriteLine(name);
            Console.WriteLine(count);
            count=name.Length;
        }
        static void Main(string[] args)
        {
            Lua lua = new Lua();
            lua.DoFile("aaa.lua");
            Console.ReadKey();
        }
    }
}

lua脚本

require "luanet"
--加载C#命名空间
luanet.load_assembly("test")
--导入C#命名空间中的类
Program=luanet.import_type("test.Program")

program1 = Program()
--首先返回函数类型,接着返回out(out是个表)
void,strLength = program1:TestOut("wang.com")

print(void,strLength)
--别忘了ref需要赋初值   ref返回的也是table表
void,count=program1:TestRef("wang",10)

print(void,count)

猜你喜欢

转载自blog.csdn.net/zxy13826134783/article/details/80259707