您的位置:首页 > 编程语言 > Lua

1、在C#与Lua相互调用

2017-01-18 15:16 1076 查看
一、利用LuaInterface调用lua代码

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

2、添加 LuaInterface.dll的引用。

3、利用解释器进行调用

[csharp] view
plain copy

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执行

[csharp] view
plain copy

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#代码

[csharp] view
plain copy

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编码保存

[plain] view
plain copy

num = 2;  

str = "lua string"  

print(num,str)  

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

[csharp] view
plain copy

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

[csharp] view
plain copy

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目录下

[plain] view
plain copy

require "luanet"  

  

luanet.load_assembly("System");  

  

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

  

num = Int32.Parse("3425")  

  

print(num)   

  

print(Int32)   

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

[csharp] view
plain copy

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");  

        }  

    }  

}  

[plain] view
plain copy

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

[csharp] view
plain copy

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";  

        }  

    }  

}  



[plain] view
plain copy

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"))  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua c#