一.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();
    }
}}
结果如下: [