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 ...
随机推荐
- 关于win8开发的一点小总结
我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...
- hdu 3722
单词间形成环,求最大值,,KM,,,,, #include<stdio.h> #include<string.h> #define N 210 #define inf 0x3f ...
- c++11 生产者/消费者
下面是一个生产者消费者问题,来介绍condition_variable的用法.当线程间的共享数据发生变化的时候,可以通过condition_variable来通知其他的线程.消费者wait 直到生产者 ...
- [小技巧] 把虚拟机中的Linux系统安装到U盘中
出于各种需求,很多用户可能经常会在Windows系统中安装虚拟机,然后在虚拟机中安装Linux系统.使用虚拟机的优点是可以同时使用多个系统,而缺点也是显然的,也就是程序运行效率较差. 而实际上,L ...
- Ubuntu 10.04下安装Opengl glx
1.安装OpenGL Library sudo apt-get install build-essential 2. 安装OpenGL Utilities sudo apt-get install l ...
- Linux目录结构及文件基础操作
一.Linux目录结构 windows系统中主要以存储介质为主(磁盘). UNIX和Linux系统中主要是以目录为主(以树形目录结构的形式构建整个系统). 1. FHS(Filesystem Hier ...
- OC特有语法-分类(category)
本文转载Keefo. Objective-C的Object-oriented programming特性提供subclass和category这2个比较非常重要的部分.subclass应该反复被各种编 ...
- Web API零碎知识
查看EF生成的sql的方法 1.通过在context中设置可以追踪EF[版本必须是6.0或以上]中生成的sql public BookServiceContext() : base("nam ...
- Android-隐式Intent
隐式Intent表示不具体明确要打开的activity,利用隐式intent我们可以打开其他应用. 一个隐式intent的主要组成部分: 1.action 要执行的操作. 通常以intent类的常量表 ...
- 整理的sql sever一些数据库查询面试题
当然,我整理的只是一些常见的面试题,具体数据库就不给了,相信大家能看懂!!! --2列出EMPLOYEES表中各部门的部门号,最高工资,最低工资 select Max(salary) as '最高工资 ...