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

[C#/Lua]C#和Lua交互的Demo

2012-04-28 17:30 423 查看
最近研究了下Lua和C#的交互,遇到C#里面的变参函数不能在lua调用的问题,后来用arg这个table变量解决了,贴个代码备忘下吧。。。C#需要引用LuaInterface。。。

using System;
using LuaInterface;

namespace LuaDemo
{
class MyLuaEngine
{
public void MyCSPrint(LuaTable luaTbl)
{
// pairs
//foreach (object oKey in luaTbl.Keys)
//{
//    if (oKey.ToString() == "n") // “参数个数”索引
//        continue;

//    Console.Write("{0}\t", luaTbl[oKey]);
//}

// ipairs
for (int i = 1; i <= int.Parse(luaTbl["n"].ToString()); i++)
{
Console.Write("{0}\t", luaTbl[i]);
}

Console.WriteLine();
}
}

class Program
{
static void Main(string[] args)
{
Lua luaVM = new Lua();
MyLuaEngine myLuaEngine = new MyLuaEngine();

Console.WriteLine("LuaDemo Starting...");
Console.WriteLine("By TZWSOHO 2012");

luaVM.RegisterFunction("MyCSPrint", myLuaEngine, myLuaEngine.GetType().GetMethod("MyCSPrint"));

// Lua 调用 C# 函数
luaVM.DoFile("luaDemo_1.lua");
luaVM.DoString("Print(nil, \"测试啊啊testing~~~\");");

// C# 调用 Lua 函数
luaVM.DoFile("luaDemo_2.lua");
LuaFunction luaFunc = luaVM.GetFunction("MyLuaPrint");
if (luaFunc != null)
{
object[] objRet = luaFunc.Call("abc", 123);
Console.WriteLine("函数返回 {0} 个参数!", objRet.Length);
}
else
{
Console.WriteLine("获取 lua 函数失败!");
}

Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
}
}


luaDemo_1.lua,放在C#生成的EXE目录下,一般比如Debug目录下:

-- 使 _G.print 函数重定向到 C# 里面的自定义函数
local print = MyCSPrint

-- 因为这个函数后面要给 luaDemo_2.lua 使用
-- 所以这里不能用 local 修饰符
function Print(...)
-- 将所有参数化为一个 table 传给 C# 的函数
-- arg["n"] 为参数个数
print(arg)
end

local t = { "123a", "cba223" }
Print(t)
Print("测试test~~~@$#!%@#$%&^(^&*)")
Print("测试test~~~@$#!%@#$%&^(^&*)", t)


luaDemo_2.lua,也放在EXE目录下:

-- 这里不能用 local 修饰符
function MyLuaPrint(...)
local t = { "haha", 123, szContent }
--require("luaDemo_1")
--dofile("luaDemo_1.lua")
loadfile("luaDemo_1.lua")
Print(...) -- 调用 luaDemo_1.lua 里面的打印函数

return 2012, t, "abc"
end



C#用的是控制台工程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: