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(, );
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#交互的更多相关文章
- Lua学习笔记2. lua变量和 循环
1. lua中变量的作用域有三种:全局,局部,表中的域 需要注意的是默认的变量都是全局变量,必须声明为local的变量才是局部变量,即使是在函数里面没有使用local修饰的变量依然是全局变量!!!! ...
- [转]LUA 学习笔记
Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...
- Lua 学习笔记(一)
Lua学习笔记 1.lua的优势 a.可扩张性 b.简单 c.高效率 d.和平台无关 2.注释 a.单行注释 -- b.多行注释 --[[ --]] 3.类型和 ...
- Lua学习笔记6:C++和Lua的相互调用
曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有. 新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...
- Lua学习笔记4. coroutine协同程序和文件I/O、错误处理
Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...
- (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境
Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...
- Lua学习笔记:面向对象
Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...
- Lua学习笔记(一)-----C#和lua的交互
一直以来对Lua热更新技术很感兴趣,在上周开始了对Lua的学习,主要学的是uLua. 直接上干货 准备工作: LuaInterface包括两个核心库一个是LuaInterface.dll,一个是Lua ...
- Lua学习笔记(二):基本语法
Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.or ...
随机推荐
- CF487E Tourists[圆方树+树剖(线段树套set)]
做这题的时候有点怂..基本已经想到正解了..结果感觉做法有点假,还是看了正解题解.. 首先提到简单路径上经过的点,就想到了一个关于点双的结论:两点间简单路径上所有可能经过的点的并等于路径上所有点所在点 ...
- Mybatis一对一和一对多配置
作者:夕下奕林 问题描述 现在有三张数据表,表名为orders,orderdetail,items,分别表示订单,订单详情,商品. 其中一个订单包含多个订单详情,表示订单中的不同个具体的商品,订单详情 ...
- Java中的数据结构通俗易懂的介绍
Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. List(接口)List是有 ...
- 开源笔记软件Joplin
Joplin is a free, open source note taking and to-do application, which can handle a large number of ...
- APPLICATION FAILED TO START 报错
错误一 原因@Service 忘记加了
- C++ 仿函数和适配器
本文从不断复杂的应用场景入手,来说明C++设计仿函数和适配器的原因,并深入源码来介绍仿函数和适配器的使用方法. 仿函数 现有一个vector,需要统计大于8的元素个数. 使用std::count_if ...
- Java基础__Java中集合类
ArrayList:有序.可重复.线程不安全.内部使用数组进行存储 LinkedList:有序.可重复.线程不安全.内部使用引用进行存储[可以很方便的进行插入.删除数据] Vector:有序.可重复. ...
- CF1204C
CF1204C-Anna, Svyatoslav and Maps 题意: 题目传送门 不想说了,阅读题. 解法: 先用floyd跑出各顶点间的最短路.把p(1)加入答案,然后沿着题目给的路径序列遍历 ...
- Linux 常用命令安装
系统版本: Centos-7-x86_64-minimal 1. 网络相关 1.1 MTR 跟踪路由,还可以测试丢包率.网络延迟 yum -y install mtr 2. 文件相关 2.1 sz ...
- Android7.0 API变更
Android N 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更. 本文重点介绍您应该了解并在开发应用时加以考虑的一些重要变更. 如果您之前发布过 Android 应用,请注意您 ...