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(, );

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(, ))

lua访问C#类库

require "launet"
luanet.load_assembly("System")
Console = luanet.import_type("System.Console")
Console.WriteLine("")

lua学习笔记3--lua与c#交互的更多相关文章

  1. Lua学习笔记2. lua变量和 循环

    1. lua中变量的作用域有三种:全局,局部,表中的域 需要注意的是默认的变量都是全局变量,必须声明为local的变量才是局部变量,即使是在函数里面没有使用local修饰的变量依然是全局变量!!!! ...

  2. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  3. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

  4. Lua学习笔记6:C++和Lua的相互调用

        曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有.     新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...

  5. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  6. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境

    Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...

  7. Lua学习笔记:面向对象

    Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...

  8. Lua学习笔记(一)-----C#和lua的交互

    一直以来对Lua热更新技术很感兴趣,在上周开始了对Lua的学习,主要学的是uLua. 直接上干货 准备工作: LuaInterface包括两个核心库一个是LuaInterface.dll,一个是Lua ...

  9. Lua学习笔记(二):基本语法

    Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.or ...

随机推荐

  1. jsp+jstl实现登录验证

    <c:choose> <c:when test="${!sessionScope.user eq null}"> <li><a href= ...

  2. Go学习笔记(六) | 使用swaggo自动生成Restful API文档(转)

    关于Swaggo 或许你使用过Swagger, 而 swaggo就是代替了你手动编写yaml的部分.只要通过一个命令就可以将注释转换成文档,这让我们可以更加专注于代码. 目前swaggo主要实现了sw ...

  3. Nginx 转发特点URL到指定服务

    location ^~ /fs/ {#如https://xx.com/fs/upload 转发到文件服务器 proxy_pass http://127.0.0.1:8080/fs/; }

  4. HTTP 协议讲解

    http请求由三部分组成,分别是:请求行.消息报头.请求正文 HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接 ...

  5. demo(一) react-native-router-flux

    react-native init AwesomeProject cd AwesomeProject 安装模块 npm i react-native-router-flux --save

  6. MSMQ使用

    Message Message是MSMQ的数据存储单元,我们的用户数据一般也被填充在Message的body当中,因此很重要,让我们来看一看其在.net中的体现,如图: 在图上我们可以看见,Messa ...

  7. Centos 7 搭建蓝鲸V4.1.16稳定社区版

    在本地用VMware模拟了三台主机 准备至少3台 CentOS 7 以上操作系统的机器,保证三台虚拟机都可以上网 最低配置:2核4G(我用的是这个) 建议配置: 4核12G 以上 192.168.16 ...

  8. Depth from Videos in the Wild 解读

    2019年7月17日11:37:05 论文 Depth from Videos in the Wild: Unsupervised Monocular Depth Learning from Unkn ...

  9. 权势二进制(51Nod 1413)

    一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能 ...

  10. layer提示带文字

    直接撸代码: //加载层-风格4 layer.msg('加载中', { icon: 16 ,shade: 0.01 });