一.Lua与C#的代码空间分配

我们用VS写在C#项目里面调用Lua代码,实际上最后都是在Lua代码空间来运行,这个空间由系统分配。 [

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101301-300x140.jpg)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101301-300x140.jpg)

二.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();
    }
}

}

结果如下:[

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101302-300x164.jpg)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101302-300x164.jpg)

三.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();
    }
}

}

结果如下: [

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101303-300x233.png)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17101303-300x233.png)