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#普通属性


浙公网安备 33010602011771号