一.Lua与C#的代码空间分配
我们用VS写在C#项目里面调用Lua代码,实际上最后都是在Lua代码空间来运行,这个空间由系统分配。 [
二.C#内执行Lua代码
语法格式:Lua 解析器对象.DoString(“Lua 代码”) 注意点:①DoString()方法主要用于执行一些较短的Lua 代码片段; ②DoString()方法执行过的代码,都会添加到Lua 代码空间,在Lua 代码文件中,是直接可以访问到这些代码的。 代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;
namespace C_Interaction_Lua
{
class Program
{
static void Main(string[] args)
{
//实例化出一个Lua空间
Lua lua = new Lua();
//1.变量的声明与访问
lua.DoString("name='wuJianGang' age='18' school='zzu'");
lua.DoString("print(name,age,school)");
//2.for循环语句
//for语句普通格式:
lua.DoString("for i=1,5,1 do print(i) end");
Console.WriteLine("-----------------------");
//for语句加@符号后的格式,代码更易读和美观
lua.DoString(@"for i=6,10,1
do
print(i)
end");
//3.函数的定义域调用
lua.DoString(@"function Init()
print('I am luaFunction')
end
Init()");
//4.table数组的声明与访问
lua.DoString("tableA={'wwwww','jjjjj','ggggg'}");
lua.DoString(@"for i=1,table.getn(tableA),1
do
print(tableA\[i\])
end");
Console.ReadKey();
}
}
}
结果如下:[
三.C#内执行Lua 文件
语法格式:Lua 解析器对象.DoFile(“[路径]Lua 文件.lua”) 操作步骤: ①添加->新建项->常规->文本文件,改名且后缀写为.lua,设置属性为始终较新则复制 但是这样创建出来的文件,文件格式是UTF-8 BOM 类型,运行后会抛异常。 ②使用Notepad++之类的文本编辑器,建议将类型修改成ANSI 类型,也可以是UTF-8 类型 两种类型区别: UTF-8 类型,即可运行正常,但是这种文档类型不支持中文显示; ANSI 类型,中英文都都支持。 注意点 在Lua 脚本文件内访问DoString 函数添加到“Lua 代码空间”的代码: GetString():取Lua 脚本中的字符串数据; GetNumber():取Lua 脚本内的数值数据; GetFunction():取Lua 脚本内的函数,并执行。 Lua代码:
print(‘66666’)
print(‘你好,我叫武建港’)
–Lua代码空间有我们之前定义的字段,方法,table表
print(name,age,school)
Init()
print(tableA[2])
webName=’武建港博客’
webURL=’www.wjgbaby.com'
myNumber=666.66
function Test()
print(‘这里调用的是Lua脚本里的Test()’)
end
function Add(num01,num02)
return num01+num02
end
C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;
namespace C_Interaction_Lua
{
class Program
{
static void Main(string[] args)
{
//实例化出一个Lua空间
Lua lua = new Lua();
//1.变量的声明与访问
lua.DoString("name='wuJianGang' age='18' school='zzu'");
lua.DoString("print(name,age,school)");
//2.for循环语句
//for语句普通格式:
lua.DoString("for i=1,5,1 do print(i) end");
Console.WriteLine("---------------------------------------");
//for语句加@符号后的格式,代码更易读和美观
lua.DoString(@"for i=6,10,1 do print(i) end");
//3.函数的定义域调用
lua.DoString(@"function Init() print('I am luaFunction') end Init()");
//4.table数组的声明与访问
lua.DoString("tableA={'wwwww','jjjjj','ggggg'}");
lua.DoString(@"for i=1,table.getn(tableA),1 do print(tableA\[i\]) end");
Console.WriteLine("---------------------------------------");
lua.DoFile("wjg.lua");
Console.WriteLine("---------------------------------------");
//GetString():取Lua 脚本中的字符串数据
string webName = lua.GetString("webName");
string webURL= lua.GetString("webURL");
Console.WriteLine(webName+":"+webURL);
//GetNumber():取Lua 脚本内的数值数据
double myNumber =lua.GetNumber("myNumber");
Console.WriteLine(myNumber);
//GetFunction():取Lua 脚本内的函数,并执行
LuaFunction luaFunctionTest= lua.GetFunction("Test");
//调用方法(变量)
luaFunctionTest.Call();
LuaFunction luaFunctionAdd= lua.GetFunction("Add");
//存入object
object\[\] obj= luaFunctionAdd.Call(8, 6);
Console.WriteLine("lua里Add()方法两个数相加的的结果:"+obj\[0\]);
Console.ReadKey();
}
}
}
结果如下: [