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"))
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"))
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#使用第三方组件生成二维码汇总
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 详解Lua中的表的概念及其相关操作方法
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#网络适配器简单操作
- C#实现导出List数据到xml文件的方法【附demo源码下载】