• lua学习笔记3--lua与c#交互


    LuaInterface是C#与Lua连接的桥梁

    LuaInterface是一个开源项目工程,内部有两个核心DLL文件:
      LuaInterface.dll:在C#中操作Lua代码需要依赖该文件;
      luanet.dll:在Lua中访问C#的类库脚本需要依赖该文件
    将两个dll文件拷贝到项目工程
    项目工程设置"引用"导入LuaInterface.dll
    将两个dll的属性都设置成"如果较新则复制"

    操作:
      引入LuaInterface命名空间
      实例化Lua解析器对象[在C#中执行Lua代码,靠的就是这个对象]
      Lua lua = new Lua();
      Lua解析器对象操作Lua代码空间
      使用Lua解析器对象,往Lua代码空间内写入变量,然后再读取使用变量
      (绝大多数情况,直接在C#中使用Lua解析器对象,加载一个Lua脚本文件进行运行)

    C#内执行Lua代码:
      语法格式       Lua解析器对象.DoString("Lua代码");
      注意:
          DoString()方法主要用于执行一些较短的Lua代码片段
          DoString()方法执行过的代码,都会添加到Lua代码空间,在Lua文件中,是直接可以访问到这些代码的

    //创建一个Lua解析器
    Lua lua = new Lua();

    //变量的声明和访问 lua.DoString("name = 'cxk' age = 72 address = 'beijing'"); lua.DoString("print(name, age, address)"); //for循环语句 lua.DoString(@"for i = 0, 10, 1 do            print(i)          end"); //函数的定义与调用 lua.DoString(@"function Show()             print('lua show Function')          end          Show()          "); //table数组声明与访问 lua.DoString("myArray = { 'AAA', 'BBB', 'CCC', 'DDD'}"); lua.DoString(@"for i = 1, table.getn(myArray), 1 do             print(myArray[i])          end"); 

    C#内执行Lua文件
        Lua解析器对象.DoFile("[路径]Lua文件.lua") lua文件编码记得改为UTF-8或者ANSI

    Lua lua = new Lua();
    lua.DoFile("xxx.lua");
            
    //GetString() 取Lua中字符串数据
    lua.GetString("name");
    
    //GetNumber() 取Lua中数值数据
    lua.GetNumber("age");
    
    //GetFunction 取Lua中的函数,只需写函数名
    LuaFunction luaShow = lua.GetFunction("Show");
    luaShow.Call();//执行lua中的函数
    LuaFunction add = lua.GetFunction("Add");
    System.Object[] obj = add.Call(10, 20);

    lua访问已存在的C#代码

    1导入luanet.dll require "luanet"
    2获取程序集 luanet.load_assembly("程序集名")
    3获取类型 变量名=luanet.import_type("程序集名.类名")

    require "launet"
    
    luanet.load_assembly("three")
    
    Calc = luanet.import_type("three.Calc")
    
    print(Calc.name)
    print(Calc.Jia(10, 20))

    lua访问C#类库

    require "launet"
    luanet.load_assembly("System")
    Console = luanet.import_type("System.Console")
    Console.WriteLine("")
  • 相关阅读:
    2018前端工程师成长路线图
    ECMAScript正则表达式6个最新特性
    Fundebug前端JavaScript插件更新至1.2.0
    写给前端工程师的10条实用原则
    代码面试需要知道的8种数据结构(附面试题及答案链接)
    20个Chrome DevTools调试技巧
    Web应用架构入门之11个基本要素
    配置Tree Shaking来减少JavaScript的打包体积
    SQL Server全文搜索(转载)
    ASP.NET Core多语言 (转载)
  • 原文地址:https://www.cnblogs.com/xianguoguo/p/11482158.html
Copyright © 2020-2023  润新知