Lua Interface基础使用
Lua是一种可爱的脚本语言,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中(多数指热更新),从而为应用程序提供灵活的扩展和定制功能.
LuaInterface Lua语言之间是一个库集成和微软。网络平台的公共语言运行时(CLR)。Lua脚本可以使用它来实例化CLR对象,访问属性、调用方法,甚至与Lua函数处理事件。(我们使用C#调用Lua, 当然你可以用C++)
你需要安装以下组件
LuaForWindows下载地址:http://luaforge.net/projects/luaforwindows/ 直接安装即可
LuaInterface下载地址:http://luaforge.net/projects/luainterface/ 下载之后把Lua51.dll, LuaInterface.dll 加入C#项目中

一、练习C#访问Lua定义变量
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface; namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
//Lua解释器,每一个解释器都是独立的
Lua lua = new Lua(); lua["num"] = 2; //创建数字变量
lua["name"] = "盘子脸"; //创建一个盘子脸名称
lua.NewTable("classList"); //创建一个班级列表 lua.DoString(@"print('hello Interface')"); //输出hello Interface
lua.DoString(@"print(num)"); //输出2
lua.DoString(@"print(name)"); //输出盘子脸
lua.DoString(@"classList[1] = '123' print(classList[1])"); //输出123 //lua.DoFile(); 这个方法是执行一个Lua文件 //从Lua中获取定义的变量值
object[] values = lua.DoString("return num,name");
double num = (double)lua["num"];
string name = (string)lua["name"];
LuaTable table = (LuaTable)lua["classList"]; Console.WriteLine("num值: " + num); //输出 2
Console.WriteLine("name值: " + name); //输出 盘子脸
Console.WriteLine("table值: " + table[1]); //输出 123 Console.ReadLine();
}
}
}
如果你敲完代码发现程序无法运行,混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。解决方案:http://www.cnblogs.com/plateFace/p/4775257.html
二、方法注册到Lua,并使用Lua调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface; namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();
Program obj = new Program(); //注册到Lua方法名可以不跟C#中的一样, 注册普通方法
lua.RegisterFunction("WriterMyName", obj, obj.GetType().GetMethod("NormalMethod"));
lua.DoString("WriterMyName()"); //注册静态方法,obj的位置填写null,
lua.RegisterFunction("StaticWriterMyName", null, typeof(Program).GetMethod("StaticMethod"));
lua.DoString("StaticWriterMyName()"); Console.ReadLine();
} public void NormalMethod()
{
Console.WriteLine("我是盘子脸");
} public static void StaticMethod()
{
Console.WriteLine("我是静态的盘子脸");
} }
}
三、Lua中使用C#的类和结构
下面在Lua代码中使用一下函数就可以实现Lua调用C#啦
- luanet.load_assembly函数:加载CLR程序集;
- luanet.import_type函数:加载程序集中的类型;
- luanet.get_constructor_bysig函数:显示获取某个特定的构造函数;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface; namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua();
lua.DoFile("C:\\Lua\\MyLua.lua"); //调用Lua文件执行,Lua里面在调用C#的类和方法 Console.ReadLine();
}
} //定义一个自己的的类
public class MyLife
{
public string myDog;
public MyLife() { }
public MyLife(string myDog)
{
this.myDog = myDog;
}
public void MyFace()
{
Console.WriteLine("my face is red");
}
public void MyDogName()
{
Console.WriteLine("Dog name is " + myDog);
}
}
}
Lua中的代码:
print("开始运行interface啦")
luanet.load_assembly("System") --加载当前dll
Int32 = luanet.import_type("System.Int32") --引入类型,准备使用C#的System.Int32类
num = Int32.Parse("123") --使用类型
print(Int32) --输出类型
print(num) --输出变量的值
luanet.load_assembly("ConsoleApplication4")
MyLife = luanet.import_type("ConsoleApplication4.MyLife")
life = MyLife() --创建类
life:MyFace()
life2 = MyLife("哈皮狗") --使用有参构造创建类
life2:MyDogName()
//今天就先写到这里O(∩_∩)O~
Lua Interface基础使用的更多相关文章
- IOS编程User Interface基础
IOS编程之User Interface基础 目录 概述 相关概念 常见问题 状态栏的隐藏 应用图标的设置 概述 IOS用户界面是APP呈现给用户最直观.最常用的方式,因此学会用户界面的编程是学习IO ...
- Cocos2d-x-Lua (2.x)脚本开发之 Lua语言基础
从今天開始,往后将陆续更新Lua教程,主要是搭载Cocos2dx ,有不论什么疑惑或者不正确的地方.尽情指正.交流.探讨. 那么首先肯定是Lua语言基础的知识点.以下直接附上代码,凝视已经非常清楚.无 ...
- lua面试基础知识
1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- Learning Lua Programming (2) Lua编程基础
开始学习Lua编程,首先从一些简单的语法开始. 一.编辑环境 下面推荐一个Lua编程的IDE,感觉是很强大的.ZeroBrane Studio,windows平台,mac平台都有.点击打开链接 官方 ...
- Lua语法基础(1)---简介、基本数据类型、表达式
我觉得我已经陷入了一个坑内.因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制.先放一放吧.首先,来回顾一下Lua的语法基 ...
- JAVA注解@Interface基础知识
java注解是在JDK5时引入的新特性,大多数框架(SpringBoot.MyBatis.Quartz)背后都在大量使用注解开发. 一.先进行一个小试验,了解注解开发流程 建立maven项目annot ...
- lua编程基础
1.目前最新的lua版本是lua5.2.3 2.官网下载地址:http://www.lua.org/ftp/ 3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用 ...
- lua语法 - 基础篇
1. 注释 单行注释:--,类似于C++的// 多行注释:--[[ ... ]],类似于C++的/*...*/ 2. 语句 分隔符:分号或者空格,一般多行写一起,建议用分号 语句块:do ... en ...
随机推荐
- maven 打包源文件
1.The source plugin can be used to create a jar file of the project sources from the command line or ...
- Android ActionBar详解(三):ActionBar实现切换Tabs标签
实现切换Tabs标签; Activity代码: public class ActionBarTabs extends Activity { @Override protected void onCre ...
- css Reset文件
/* KISSY CSS Reset 理念:清除和重置是紧密不可分的 特色:1.适应中文 2.基于最新主流浏览器 维护:玉伯(lifesinger@gmail.com), 正淳(ragecarrier ...
- eclipse 汉化
对于: Eclipse Standard/SDK Version: Luna Release (4.4.0) 对应的网络地址:http://download.eclipse.org/technolog ...
- Bootstrap 字形图标(Glyphicons)
http://w3c.3306.biz/bootstrap/eg/bootstrap--glyphicons-list.html
- c#按键Up和Down对Textbox的内容加1减1
private void textBox_proc1value_KeyDown(object sender, KeyEventArgs e) { Keys key = e.KeyCode; if (e ...
- C# ITextShap 生成PDF 下载
using iTextSharp.text; using iTextSharp.text.pdf; //创建 Document Document pdfDoc = new Document(new R ...
- python - num1 -初识python
一.了解python python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- Django RESTful API 设计指南
网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...
- CoreData的数据迁移
CoreData的数据迁移 很多人说CoreData坑多,现在才感觉到,今天上午写代码的时候,发现了一个大问题. 过程如下,之前我自己给coredata的实体添加了几个字段,后来网上的一个用户说我 ...