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基础使用的更多相关文章

  1. IOS编程User Interface基础

    IOS编程之User Interface基础 目录 概述 相关概念 常见问题 状态栏的隐藏 应用图标的设置 概述 IOS用户界面是APP呈现给用户最直观.最常用的方式,因此学会用户界面的编程是学习IO ...

  2. Cocos2d-x-Lua (2.x)脚本开发之 Lua语言基础

    从今天開始,往后将陆续更新Lua教程,主要是搭载Cocos2dx ,有不论什么疑惑或者不正确的地方.尽情指正.交流.探讨. 那么首先肯定是Lua语言基础的知识点.以下直接附上代码,凝视已经非常清楚.无 ...

  3. lua面试基础知识

    1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...

  4. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  5. Learning Lua Programming (2) Lua编程基础

    开始学习Lua编程,首先从一些简单的语法开始. 一.编辑环境 下面推荐一个Lua编程的IDE,感觉是很强大的.ZeroBrane Studio,windows平台,mac平台都有.点击打开链接  官方 ...

  6. Lua语法基础(1)---简介、基本数据类型、表达式

    我觉得我已经陷入了一个坑内.因为,安装了Lua和SublimeText3编辑器之后,怎么使自己编写的lua代码在untiy内运行起来,是个我完全不了解的机制.先放一放吧.首先,来回顾一下Lua的语法基 ...

  7. JAVA注解@Interface基础知识

    java注解是在JDK5时引入的新特性,大多数框架(SpringBoot.MyBatis.Quartz)背后都在大量使用注解开发. 一.先进行一个小试验,了解注解开发流程 建立maven项目annot ...

  8. lua编程基础

    1.目前最新的lua版本是lua5.2.3 2.官网下载地址:http://www.lua.org/ftp/ 3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用 ...

  9. lua语法 - 基础篇

    1. 注释 单行注释:--,类似于C++的// 多行注释:--[[ ... ]],类似于C++的/*...*/ 2. 语句 分隔符:分号或者空格,一般多行写一起,建议用分号 语句块:do ... en ...

随机推荐

  1. Javascript:重用之道

    近期写了大量的js,愈发觉得自己的代码过于冗余,所以,利用周末的时间研习代码重用之道,有了这篇博文所得: 重用代码: 1.尽量保证 HTML 代码结构一致,可以通过父级选取子元素 2.把核心主程序实现 ...

  2. Sonar入门(四):Eclipse集成Sonar

    sonar及其插件在项目中的使用方法 Sonar平台 Sonar平台的安装见一文, 在Sonar平台上进行的检查可以通过hudson进行触发, A. 没有做持续集成的项目可以复制以下hudson上的任 ...

  3. _js day11

  4. C#构造函数的 "继承" 问题

    首先说明下 之所以用 双引号 是因为构造函数是没有继承的 派生类默认会调用基类的无参数构造函数 比如: public class A         { public A()         { Co ...

  5. js、java传值编码

    一.请求使用post方法不需要考虑编码问题.二.前后台统一编码,支持中文,不考虑编码:tomcat utf-8编码三.前后台编码不统一 $.ajax({                url : &q ...

  6. exc_bad_access(code=1, address=0x789870)野指针错误

    原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调 ...

  7. unity 之2D游戏简单操作

    unity 做2D项目也很方便.  首先要调整camera的模式,camera 的检视面板参数如下: perspective 模式就是平时用的 模式.摄像机到游戏物体是有角度的张开, 而 orthog ...

  8. Keil C减小代码编译量大小的方法(gai)

    keil-C减小代码编译大小的方法整理 方法一:(通过优化代码减小) 1.1少做乘除运算,使用左/右移位来实现乘除 Eg ,普通:a = 0x80*4: 优化:a = 0x80<<2: 1 ...

  9. sqlserver2008 case when then else end

    在写sql语句的时候,有时候我们需要对字段的只进行判断计算.查看了下相关文档在sql2012.sql2014里边可以使用  IIF 函数直接完成. 但是现在我需要在sql2008版本中完成最字段的计算 ...

  10. Java学习笔记--JDBC数据库的使用

    参考  hu_shengyang的专栏 : http://blog.csdn.net/hu_shengyang/article/details/6290029 一. JDBC API中提供的常用数据库 ...