Lua与C#代码交互

Lua与C#代码交互

下载地址:LuaInterface

LuaInterface.dll C#执行访问Lua代码几种方法

C#内部创建Lua

using System;
using LuaInterface;
namespace Interface_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Lua
            Lua lua = new Lua();     //创建Lua解释器
            lua["num"] = 2;          //定义一个num变量,类型:number
            lua["str"] = "string";   //定义一个str变量,类型:string
            lua.NewTable("tab");     //定义一个tab变量,类型:table
            lua.DoString(@"tab = {'banana','orange','apple'}"); //给表赋值

            //读取Lua
            double num = (double)lua["num"];
            string str = (string)lua["str"];
            LuaTable luaTable = (LuaTable)lua["tab"];
            string luatab = (string)luaTable[1];
        }
    }
}

C#执行Lua文件

using System;
using LuaInterface;
namespace Interface_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Lua
            Lua lua = new Lua();     //创建Lua解释器
            lua.DoFile("test.lua");  //执行外部Lua脚本
        }
    }
}

C#执行字符串Lua

using System;
using LuaInterface;
namespace Interface_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Lua
            Lua lua = new Lua();     //创建Lua解释器
            string str = @"num=150 name='shylock' function AddNum(num1,num2) return num1+num2 end temp=AddNum(num,num) print(temp)";
            lua.DoString(str);      //300
        }
    }
}

C#成员变量注册成为Lua变量

using System;
using LuaInterface;
namespace Interface_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Lua lua = new Lua();
            Program obj = new Program();

            //注册到Lua方法名可以不跟C#中的一样, 注册普通方法
            lua.RegisterFunction("WriterMyName", obj, obj.GetType().GetMethod("NormalMethod"));
            lua.DoString("WriterMyName()");

            //注册静态方法,obj的位置填写null,
            lua.RegisterFunction("StaticWriterMyName", null, typeof(Program).GetMethod("StaticMethod"));
            lua.DoString("StaticWriterMyName()");

            Console.ReadLine();
        }

        public void NormalMethod()
        {
            Console.WriteLine("我是盘子脸");
        }

        public static void StaticMethod()
        {
            Console.WriteLine("我是静态的盘子脸");
        }
    }
}

Luanet.dll Lua执行访问C#代码几种方法

Lua调用C#方法

require "luanet"
luanet.load_assembly("Interface_Test")	--先获取程序集
program=luanet.import_type("Interface_Test.Program")	--再获取C#的类

program.StaticMethod();	--调用静态方法

program=program();		--调用普通方法首先实例化
program:NormalMethod()	--调用普通方法(注意调用时使用冒号)

Lua调用C#属性

require "luanet"
luanet.load_assembly("LuaLearn")	--先获取程序集
program=luanet.import_type("LuaLearn.Program")	--再获取C#的类

print(program.name)		        --访问C#静态属性

program=program();
print(program.age)			--访问C#普通属性

更多学习

bilibili
精美壁纸

posted @ 2021-07-29 21:25  镜子-眼泪  阅读(423)  评论(0)    收藏  举报