【分享】C#中执行lua代码,以及将c#注册进lua的全局方法

2015年09月09日 14:39 0 点赞 0 评论 更新于 2025-11-21 18:59

作者:三石 原文链接:http://www.taidous.com/forum.php?mod=viewthread&tid=32765&_dsign=9799db16

在使用C#与Lua交互之前,需要引用luainterface.dllluanet.dll。下面将详细介绍如何将C#方法注册为Lua的全局方法、在C#中执行Lua代码和脚本,以及实现C#与Lua的相互调用。

一、将C#方法注册为Lua的全局方法

在C#中,可以将类的普通方法和静态方法注册为Lua的全局方法,这样在Lua代码中就可以直接调用这些方法。以下是示例代码:

using System;
using LuaInterface;

class Program
{
static void Main(string[] args)
{
// 创建Lua实例
Lua lua = new Lua();
// 创建Program类的实例
Program obj = new Program();

// 把一个类中的普通方法注册到Lua中
lua.RegisterFunction("NormalMethod", obj, obj.GetType().GetMethod("NormalMethod"));
// 在Lua中调用注册的普通方法
lua.DoString("NormalMethod()");

// 把一个类中的静态方法注册到Lua中
lua.RegisterFunction("MyStaticMethod", null, typeof(Program).GetMethod("MyStaticMethod"));
// 在Lua中调用注册的静态方法
lua.DoString("MyStaticMethod()");

Console.ReadLine();
}

// 普通方法
public void NormalMethod()
{
Console.WriteLine("wahaha");
}

// 静态方法
public static void MyStaticMethod()
{
Console.WriteLine("static");
}
}

在上述代码中,首先创建了一个Lua实例,然后分别将NormalMethod普通方法和MyStaticMethod静态方法注册到Lua中,并在Lua代码中调用这些方法。

二、在C#中执行Lua代码和脚本

1. 执行Lua代码

可以在C#中直接执行Lua代码,示例如下:

using System;
using LuaInterface;

class Program
{
static void Main()
{
// 创建Lua实例
Lua lua = new Lua();

// 在C#中执行Lua代码,定义变量
lua.DoString("num=2");
lua.DoString("name='YDL'");
lua.DoString("flag=true");

// 执行Lua代码并返回结果
object[] values = lua.DoString("return num,name,flag");

// 遍历返回的结果并输出
foreach (object obj in values)
{
Console.WriteLine(obj);
}

// 保持控制台窗口打开
Console.ReadLine();
}
}

在这段代码中,通过DoString方法在C#中执行Lua代码,定义了几个变量,并获取这些变量的值进行输出。

2. 执行Lua脚本

除了执行Lua代码,还可以执行Lua脚本文件。以下是示例代码:

using System;
using LuaInterface;

class Program
{
static void Main()
{
// 创建Lua实例
Lua lua = new Lua();

// 在C#中执行Lua脚本
lua.DoFile("helloword.lua");

// 保持控制台窗口打开
Console.ReadLine();
}
}

对应的helloword.lua脚本内容如下:

print("hello!")

在C#代码中,使用DoFile方法执行指定的Lua脚本文件。

三、C#中执行Lua脚本,Lua脚本调用C#中的方法

1. Lua脚本代码

require "luanet"
-- 加载指定的程序集,testLuainterface是命名空间
luanet.load_assembly("testLuainterface")
-- 导入C#中的类型
Program = luanet.import_type("testLuainterface.Program")
-- 创建Program类的实例
program1 = Program()
-- 调用C#方法并获取返回值
s = program1:TestOut("ydl")
-- 输出返回值
print(s)

2. C#代码

using System;
using LuaInterface;

namespace testLuainterface
{
class Program
{
static void Main(string[] args)
{
// 创建Lua实例
Lua lua = new Lua();
// 执行Lua脚本
lua.DoFile("helloword.lua");
// 保持控制台窗口打开
Console.ReadLine();
}

// 供Lua调用的方法
public int TestOut(string name)
{
return name.Length;
}
}
}

在这个示例中,Lua脚本通过luanet库加载C#程序集,并导入Program类,然后创建实例并调用TestOut方法,最后输出返回值。C#代码则负责执行该Lua脚本。

以上内容是从siki老师的热更新课程中学到的,希望对大家在C#与Lua交互方面有所帮助。