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. java如何从方法返回多个值

    本文介绍三个方法,使java方法返回多个值. 方法1:使用集合类 方法2:使用封装对象 方法3:使用引用传递 示例代码如下: import java.util.HashMap; import java ...

  2. nyoj201 作业题

    作业题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 3   描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方 ...

  3. [Cycle.js] The Cycle.js principle: separating logic from effects

    The guiding principle in Cycle.js is we want to separate logic from effects. This first part here wa ...

  4. Asp.Net EF Code First 简单入门

    今天在上班期间花了点时间学习了一下微软的EntityFramework Code First技术,这篇文章只是简单的入门,不多废话,下面直入主题. 一.首先添加一个解决方案,接着添加一个web网站,D ...

  5. SVN的初步使用方法

    1.需要公司提供SVN账号密码 2.cd 输入本地存储路径 3.输入服务器地址 --uesr= (账号名) --password=(账号密码) 4.本地路径会自动创建文件 5.经理会初始化项目 5.1 ...

  6. cocoa pods 安装 转载

    1.打开终端 终端输入  $ruby -v  查看ruby的版本 打印代码: ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64- ...

  7. hdu 畅通工程续

    算法:多源最短路(floyd) 题意:有多个城镇,有些之间有通路,给你起点和终点,输出最短路径: Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路 ...

  8. 连接SQLite 创建ADO.net实体类

    0.开发环境 win10,vs2013-x64 1.安装: sqlite-netFx451-setup-bundle-x86-2013-1.0.102.0.exe 注意事项:选在VisualStudi ...

  9. 管理员权限dropfiles和copydata小时失败问题

    //处理低权限向高权限进程发消息的失败的问题 if(windows::version::instance()->IsVistaOrLater()) { typedef BOOL (WINAPI ...

  10. 1169 二叉树遍历(XCOJ DFS)

    给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 样例输入 BADC BDCA 样例输出 ABCD #include <iostream> ...