vJine.Lua


vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能。


1. 授权:

MPL2.0

相关资源:

nuget:(https://www.nuget.org/packages?q=vjine)
API文档:(http://git.oschina.net/vjine/vJine.Lua/attach_files)

Lua官网:(http://www.lua.org)
Lua中国开发者:(http://www.luaer.cn)
babelua(基于Visual Studio扩展的Lua编辑器):(https://babelua.codeplex.com/)

QQ群:115051701

2. 说明:

1)vJine.Lua采用C++/CIL封装自Lua,当前Lua版本为(Lua 5.3.0)
2)暂不支持方法重载,注入时同名方法将被覆盖。

3. 功能简介:

//引用命名空间

using vJine.Lua;

//获取Lua版本

string V = LuaContext.Version;

//实例化LuaContext

LuaContext luaContext = new LuaContext();
string vars_name = "vJine.Lua.Vars.bool";

//设置与读取堆栈变量

bool v_bool = true;
luaContext.set(true);
luaContext.get(out v_bool);
Debug.Assert(v_bool == true);
luaContext.set(false);
luaContext.get(out v_bool);
Debug.Assert(v_bool == false);

//设置与读取全局变量

luaContext.set(vars_name, true);
luaContext.get(vars_name, out v_bool);
Debug.Assert(v_bool == true);
luaContext.set(vars_name, false);
luaContext.get(vars_name, out v_bool);
Debug.Assert(v_bool == false);

//注册:匿名方法

luaContext.reg("vJine.Lua.funcs.anony", new Action<MyStatus>((MyStatus E) => {
string msg = string.Format("result[anonymous]:{0}", E);
}));

//注册:静态方法

luaContext.reg("vJine.Lua.funcs.M", new Action<MyStatus>(MyClass.M));

//注册:实例方法

MyClass xq = new MyClass();
luaContext.reg("vJine.Lua.funcs.m", new Action<MyStatus>(x1.m));

//注册类:默认名称

luaContext.reg<MyClass>();

//注册类:自定义名称

luaContext.reg<MyClass>("vJine.Lua.YourClass");

//注入脚本:

object[] R = luaContext.inject(
"function callback(my_arg) return my_arg .. ' on_the_fly' end return true, 1.234, callback('vJine.Lua')");

//调用脚本

object[] Obj = luaContext.exec("callback", "vJine.Lua");

//加载脚本:

R = luaContext.load("d:/vJine.Lua/start.lua");

//打印堆栈变量:

luaContext.print_vars();

//打印全局变量:

luaContext.print_var("vJine.Lua.UT.MyClass");

//类定义:

public class MyClass {
public MyClass My { get; set; } public bool B { get; set; }
public bool? b { get; set; }
public byte[] B_ { get; set; } public double D { get; set; }
public double d { get; set; } public Guid G { get; set; }
public Guid? g { get; set; }
public Guid[] G_ { get; set; } public string S { get; set; }
public string s { get; set; }
public string[] s_ { get; set; } public DateTime DT { get; set; }
public DateTime? dt { get; set; }
public DateTime[] DT_ { get; set; } public MyStatus E { get; set; }
public MyStatus? e { get; set; }
public MyStatus[] E_ { get; set; } publicstaticvoidM(MyStatusE){
string msg = string.Format("result[anonymous]:{0}", E);
} publicvoidm(MyStatusE){
string msg = string.Format("result[anonymous]:{0}", E);
} publicstaticstringSM(inta,stringb){
return string.Format("SM:Result:a,{0};b,{1}", a, b);
} publicstringIM(inta,stringb){
return string.Format("IM:Result:a,{0};b,{1}", a, b);
} publicstringshow_properties(){
return string.Format("Properties:b,{0};d,{1};s,{2}", this.B, this.D, this.s);
}
}

vJine 第三波 之 Lua 来袭 vJine.Lua的更多相关文章

  1. 轮子来袭 vJine.Core Orm 之 04_使用进阶

    1.配置文件: 框架默认情况下支持"connectionStrings"的配置方式,如<轮子来袭 vJine.Core Orm 之 01_快速入门>所述: 框架的进阶设 ...

  2. 轮子来袭 vJine.Core Orm 之 03_架构分析

    1.vJine.Core ORM 架构: 如上图所示,vJine.Core ORM的特点如下: 所有操作均以DataManager为核心: DataManager业务部分的增删改查操作依赖于Class ...

  3. Lua 架构 The Lua Architecture

    转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...

  4. VC和VS调用Lua设置以及Lua C API使用。

    通过c++调用lua 脚本,    环境VC++6.0    lua  sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...

  5. lua调用不同lua文件中的函数

    a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...

  6. 通过lua栈了解lua与c的交互

    lua是如何执行的 其中分析.执行部分都是c语言实现的. lua与c的关系 lua的虚拟机是用c语言实现的,换句话说一段lua指令最终在执行时都是当作c语言来执行的,lua的global表,函数调用栈 ...

  7. lua编程之lua与C相互调用

    lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情 ...

  8. lua脚本之lua语言简介以及lua的安装

    本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设 ...

  9. Lua基本语法-lua与C#的交互(相当简单详细的例子)

    lua脚本 与 C#的交互 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lua And C# -- ...

随机推荐

  1. DuiLib(一)——窗口及消息

    最近看了下开源界面库duilib的代码,写几篇相关的文章.网上已经有好多相关的文章了,我这里只是记录自己的学习过程,写到哪里算哪里,权当自娱自乐. duilib是一轻量级的direcui界面库,所谓d ...

  2. Ectouch修改虚拟销售数量的方法

    1.参考:http://zhidao.baidu.com/link?url=5OEkRlKqtRcmnO6iyW2pq-gw1aj-1S6QdImmBkQZHHt6tcvT50aIf_1nibP3T6 ...

  3. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) B. Bear and Blocks 水题

    B. Bear and Blocks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pr ...

  4. OSG中的示例程序简介(转)

    OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...

  5. C加密解密

    /********************************************************* * des.h * 用户使用des算法头文件 * **************** ...

  6. linux 进程地址空间的一步步探究

    我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间.其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间. 那虚拟内存空间 ...

  7. 如何用eclispe远程调试tomcat--转载

    原文地址:http://jingyan.baidu.com/article/0320e2c1f4ef6b1b87507b06.html tomcat是一种非常常见的java web应用服务器,有时候服 ...

  8. Redis 连接

      Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1:6379> ...

  9. Windows 之 获取管理员权限

    新建文本文档,写入如下内容: Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\*\shell\runas] [HKEY_CLASSES ...

  10. C++: Why pass-by-value is generally more efficient than pass-by-reference for built-in (i.e., C-like) types

    A compiler vendor would typically implement a reference as a pointer. Pointers tend to be the same s ...