1、在C#与Lua相互调用

一、利用LuaInterface调用lua代码

1、下载luainterface,这里用的luainterface-1.5.3版本。

2、添加 LuaInterface.dll的引用。

3、利用解释器进行调用

using System;
using LuaInterface;
class Program
{
    static void Main(string[] args)
    {
        Lua lua = new Lua();//创建LUA解释器
        lua["num"] = 34;
        Console.WriteLine(lua["num"]);
        Console.ReadLine();
    }
}


二、lua.Dostring执行

using System;
using LuaInterface;
class Program
{
    static void Main(string[] args)
    {
        Lua lua = new Lua();//创建LUA解释器
        lua.DoString("str = 'a lua string'");
        lua.DoString("num = 2");
        object[] values = lua.DoString("return num,str");
        foreach(object obj in values)
            Console.WriteLine(obj);
        Console.ReadLine();
    }
}

三、lua.DoFile执行

c#代码

using System;
using LuaInterface;
class Program
{
    static void Main(string[] args)
    {
        Lua lua = new Lua();//创建LUA解释器
        lua.DoFile("mylua.lua");
        Console.ReadLine();
    }
}
lua代码,PS:要使用ANSI编码保存
num = 2;
str = "lua string"
print(num,str)

四、将C#普通方法注册到Lua

using System;
using LuaInterface;
class Program
{
    static void Main(string[] args)
    {
        Lua lua = new Lua();//创建LUA解释器
        Program p = new Program();
        lua.RegisterFunction("CLRMethod", p, p.GetType().GetMethod("CLRMethod"));
        lua.DoString("CLRMethod()");
        Console.ReadLine();
    }


    public void CLRMethod()
    {
        Console.WriteLine("CLRMethod is Run");
    }
}

五、将C#静态方法注册到Lua

using System;
using LuaInterface;
class Program
{
    static void Main(string[] args)
    {
        Lua lua = new Lua();//创建LUA解释器
        lua.RegisterFunction("CLRMethod", null, typeof(Program).GetMethod("CLRMethod"));
        lua.DoString("CLRMethod()");
        Console.ReadLine();
    }

    public static void CLRMethod()
    {
        Console.WriteLine("Static CLRMethod is Run");
    }
}

六、Lua调用C#方法

1、将luanet.dll 放入Debug目录下

require "luanet"

luanet.load_assembly("System");

Int32 = luanet.import_type("System.Int32");

num = Int32.Parse("3425")

print(num) 

print(Int32) 


2、实例II,将程序集名称与命名空间改成testluainterface

using LuaInterface;
namespace testluainterface
{
    class Program
    {
        static void Main(string[] args)
        {
            Lua lua = new Lua();//创建LUA解释器
            lua.DoFile("mylua.lua");
            Console.ReadLine();
        }
        public string name = "name of program";
        public void TestMethod()
        {
            Console.WriteLine("TestMethod is Run");
        }
    }
}


require "luanet"

luanet.load_assembly("testluainterface")

Program = luanet.import_type("testluainterface.Program")

program1 = Program()

print(program1.name)

program1:TestMethod()


七、Lua调用C#特殊方法(out ref)

1、当函数中有out或ref参数时,out参数和ref参数和函数的返回值一起返回,并且调用的时候,out参数不需要传入

out和ref会作为返回值和c#方法组成一个table一起返回,先返回方法返回值,再返回out或ref

using System;
using LuaInterface;
namespace testluainterface
{
    class Program
    {
        static void Main(string[] args)
        {
            Lua lua = new Lua();//创建LUA解释器
            lua.DoFile("mylua.lua");
            Console.ReadLine();
        }

        public void TestOut(string text, out string msg)
        {
            Console.WriteLine(text);
            msg = "out";
        }

        public void TestRef(string text, ref string msg)
        {
            Console.WriteLine(text);
            msg = "ref";
        }
    }
}


require "luanet"

luanet.load_assembly("testluainterface")

Program = luanet.import_type("testluainterface.Program")

program1 = Program()

print(program1:TestOut("Lua out"))

print(program1:TestRef("Lua ref","C# ref"))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值