Lua学习笔记(一)-----C#和lua的交互
一直以来对Lua热更新技术很感兴趣,在上周开始了对Lua的学习,主要学的是uLua。
直接上干货
准备工作:
LuaInterface包括两个核心库一个是LuaInterface.dll,一个是Luanet.dll,我们可以通过LuaInterface完成Lua和C#(CLR)之间的互相调用
需要在vs的工程中导入两个dll分别是LuaInterface.dll和luanet.dll,前者是vs调用lua时需要引用,并在vs的工程中引入命名空间using LuaInterface;引用以后就可以创建lua的解释器,来执行lua代码。
lua代码的脚本需要放在vs工程的输出环境下即E:\vsworkspace\luainterface\luainterface\bin\Debug文件下。并且编码格式一定要是ANSI。UTF-8在编译时会出错。
luanet.dll是在lua脚本中调用vs的方法或变量时需要引入,require “luanet” 并且需要将该dll放在vs工程的输出环境下,即E:\vsworkspace\luainterface\luainterface\bin\Debug文件下。
一、在C#中调用lua
1、在C#中执行lua代码。
Lua lua = new Lua(); //创建lua解释器
lua["num"] = ; //定义一个num
lua["string"] = "Hello Lua "; //定义一个字符串
Console.WriteLine(lua["num"]);
Console.WriteLine(lua["string"]);
Console.ReadKey();
2、访问lua环境中的变量
double num = (double)lua["num"];
string str = (string)lua["str"];
说一下lua变量类型和c#中变量类型的对应
nil null
string System.String
number System.Double
boolean System.Boolean
table LuaInterface.LuaTable
Function LuaInterface.LuaFunction
3、在C#中执行Lua脚本文件,或者脚本字符串
Lua lua = new Lua(); //创建lua解释器
//lua.DoString("xxxxxxxxxx"); 里边写的字符串就相当于lua脚本中的代码
lua.DoString("num=2");
lua.DoString("str = 'a string'"); object[] strs = lua.DoString("return num,str"); foreach (object item in strs)
{
Console.WriteLine(item);
}
Lua lua = new Lua(); //创建lua解释器
lua.DoFile("myLua.lua");//这个lua脚本需要放在vs的bin/debug文件夹下
4、把一个C#方法注册进Lua的一个全局方法
//把一个类中的普通方法注册进去
Program p = new Program();
lua.RegisterFunction("LuaMethod", p, p.GetType().GetMethod("CLRMethod"));
lua.DoString("LuaMethod()");//执行这个方法 //把一个类的静态方法注册进去
lua.RegisterFunction("MyStaticMethod",null,typeof(Program).GetMethod("MyStaticMethod"))
lua.DoString(" MyStaticMethod()") //执行这个方法 public void CLRMethod()
{
Console.WriteLine("哈哈");
} public static void MyStaticMethod()
{
Console.WriteLine("这是静态方法");
}
二、在Lua中使用c#中的类 这是lua中的代码
require "luanet" --请求连接
luanet.load_assembly("System") --load_assembly 加载程序集
luanet.load_assembly("testluainterface")
Int32 = luanet.import_type("System.Int32") --import_type 导入类型
Program = luanet.import_type("testluainterface.Program")
num = Int32.Parse("")
--print(Int32)
--print(num)
program1 = Program() --使用类型
--print(program1.name) --输出变量
--program1:TestMethod() --调用方法
--void, strlength = program1:TestOut("hahaha") --调用带有Out的方法
--print(void,strlength) --输出方法的返回值 和 out的返回值 C#的方法没有返回值这里也需要接收 会返回nil
void ,strlength = program1:TestRef("sahdjkhaskd",) --调用带有Ref的方法 需要给ref传值
print(void,strlength) --输出方法的返回值 和 ref的返回值
lua脚本写好之后在C#中使用lua.DoFile("脚本的名字.lua")进行调用就会执行lua这个脚本即可。
在C#中对应的在Program类中的一些方法如下
public string name = "zhangli";
public void TestMethod()
{
Console.WriteLine("TestMethod");
}
public void TestOut(string name,out int count)
{
Console.WriteLine(name);
count = name.Length;
}
public void TestRef(string name,ref int count)
{
Console.WriteLine(name );
Console.WriteLine(count);
count = name.Length;
}
三、在Lua中通过Add方法或者Remove方法把一个Lua的函数注册或者注销从C#中的事件委托中
function method()
end
obj.SomeEvent:Add(methodname(不用带引号))
根据学习进度今天分享这些基础内容。后续会继续学习。欢迎批评指正,共同学习。
欢迎广大博友加群学习165628892(进群备注:博客) 随时提出问题解决问题!
树欲静而风不止,子欲养而亲不待
2016年12月15日17:30:16
Lua学习笔记(一)-----C#和lua的交互的更多相关文章
- [转]LUA 学习笔记
Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...
- Lua学习笔记(二):基本语法
Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.or ...
- Lua 学习笔记(一)
Lua学习笔记 1.lua的优势 a.可扩张性 b.简单 c.高效率 d.和平台无关 2.注释 a.单行注释 -- b.多行注释 --[[ --]] 3.类型和 ...
- Lua学习笔记6:C++和Lua的相互调用
曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有. 新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项 ...
- Lua学习笔记4. coroutine协同程序和文件I/O、错误处理
Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...
- (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境
Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...
- Lua学习笔记:面向对象
Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...
- HTML+CSS学习笔记(5)- 与浏览者交互,表单标签
HTML+CSS学习笔记(5)- 与浏览者交互,表单标签 1.使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务 ...
- Lua 学习笔记(一)环境搭建
Lua是一个小巧的脚本语言.Lua由标准C编写而成,代码简洁,几乎在所有的操作系统和平台上都可以编译,运行. 主要讲一下mac和win下的环境搭建. 工具: 1.Sublime Text 2 ...
随机推荐
- flask在windows上用mod_wsgi部署
flask在windows上用mod_wsgi部署也是折腾了不少时间,下面就总结下. 首先下载Apache httpd,我认为Apache Hans比较好: 一般这种情况下,你的python环境已经安 ...
- U盘容量变小的处理方式
我就说一下win7下的步骤吧,xp应该差不多,管理员身份运行命令行(快捷键win+R), diskpart回车 list disk回车 看看你的u盘是哪一个,选择他(select disk X回车) ...
- Fastboot模式和Recovery模式
http://blog.csdn.net/luoshengyang/article/details/29688041 在回答第一个问题之前,我们先来看看Android设备从硬件到系统的结构,如图1所示 ...
- c#操作Excel
Excel是微软公司办公自动化套件中的一个软件,他主要是用来处理电子表格.Excel以其功能强大,界面友好等受到了许多用户的欢迎.在设计应用系统时,对于不同的用户,他们对于打印的需求是不一样的,如果要 ...
- 源码阅读笔记 - 2 std::vector (1)
vector的源码真是太长了,今天用了一个下午和一个晚上看和注释了前面的一千行左右 p.s.博客园的代码高亮真是太垃圾, 如果想要阅读带注释的源码,推荐粘贴到VS2015里,然后按ctrl+z取消自动 ...
- retrieve jenkins console output
@Api(value = "console", description = "Retrieve the Console Outputs",produces=Me ...
- 别人整理的DP大全(转)
动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- Laravel学习笔记(一)安装配置开发环境
摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Rub ...
- c++ 使用shell命令
#include <iostream> #include <stdio.h> #include <vector> #include <unistd.h> ...
- SQL Server 2008 R2企业版开发版等版本下载 (转载)
一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) - DVD (Chinese-Simplified) File Name: cn_sq ...