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. python瞎练

    需求:有不规则列表 singlelist3 = [ '总计', '每吨人工:', '总人工', 1748.07, '金额'],如果当前元素为字符串且该元素的下一个相邻位置仍为字符串,那么请在该元素后面 ...

  2. 09 saltstack生产实例--Haproxy+keepalived

    1.如何理解haproxy+keepalived https://www.cnblogs.com/zs-wei/p/9213961.html HaProxy可以通过监听一个统一的端口对外提供能力,然后 ...

  3. ansible API 常用模块

    常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 fro ...

  4. learning memchr func

    extern void *memchr(const void *buf, int ch, size_t count);   用法:#include <string.h> 功能:从buf所指 ...

  5. 51 Nod 1449 砝码称重

    1449 砝码称重  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有好多种砝码,他们的重量是 w0,w1, ...

  6. 【csp模拟赛1】铁路网络 (network.cpp)

    [题目描述] 在暑假来临之际,小 Z 的地理老师布置了一个暑假作业,让同学们暑假期间 了解一下 C 国的铁路发展史.小 Z 在多番查证资料后发现,C 国在铁路发展初期, 铁路网络有着一个严密规整的结构 ...

  7. Python 通过文件名批量移动文件

    Python 通过文件名批量移动文件 https://stackoverflow.com/questions/28913088/moving-files-with-wildcards-in-pytho ...

  8. ie浏览器中时间转换

    var begintime = $("#start").val(); var lastLoginTimeStart =new Date(begintime).getTime();/ ...

  9. LGU67496 小$s$的玻璃弹珠

    题意 在一幢\(m\)层建筑你将获得\(n\)个一样的鸡蛋,从高于\(x\)的楼层落下的鸡蛋都会碎.如果一个蛋碎了,你就不能再把它掉下去. 你的目标是确切地知道\(x\)的值.问至少要扔几次才能确定. ...

  10. Hdu2037

    Hdu2037 - 今年暑假不AC 题意: 在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少. 解法: 这其实就是一个大水题,一个非常简单明了的区间覆盖问题 ...