Lua和C#代码交互(VS)

来源:互联网 发布:淘宝开宠物用品店 编辑:程序博客网 时间:2024/06/05 02:15

一、配置

1.需要将LuaInterface.dll和luanet.dll放置在[工程名\bin\Debug]文件夹下,C#脚本中引用LuaInterface命名空间

2.C#中以lua.Dofile方式调用的lua脚本需同样放置在[工程名\bin\Debug]文件夹下

3.Lua中require "luanet",通过luanet.load_assembly("LuaTest")引入命名空间,通过Program=luanet.import_type("LuaTest.Program")引入类


二、lua调用C#类

1.在lua中引入C#的类后,若将C#类实例化后使用,可以用[实例名.变量名]来调用C#类中的静态变量和非静态变量(变量为private一样可以调用)

2.在lua中引入C#的类后,可以C#类实例化后使用其中非静态方法[实例名:方法名],静态方法则用[类名.方法名]进行调用(方法为private一样可以调用)

3.out参数的方法使用时不用传入out参数,out值会通过接收返回的值来手动修改,即函数会返回两个值(void方法会返回nil)

4.ref参数的方法使用时需要传入ref参数,ref值会通过接收返回的值来手动修改,即函数会返回两个值(void方法会返回nil)

require "luanet"luanet.load_assembly("System")luanet.load_assembly("LuaTest")Int32=luanet.import_type("System.Int32")Program=luanet.import_type("LuaTest.Program")--[[]num=Int32.Parse("218")--print(Int32)--print(num)program1=Program()print(program1.names)program1:NormolMethod()Program.StaticMethod()]]--program2=Program()void,length= program2:TestOut("This is it")print(void,length)void,length=program2:TestRef("我的",14)print(void,length)

Lua脚本内容

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using LuaInterface;namespace LuaTest{    class Program    {        public string name = "Zack";        public static string names = "十二金人";        static void Main(string[] args)        {            Lua lua = new Lua();//lua解释器            lua.DoFile("LuaUseCSClass.lua");//解释lua文件        }        public void NormolMethod()        {            Console.WriteLine("普通方法");        }        public static void StaticMethod()        {            Console.WriteLine("静态方法");        }        public void TestOut(string name,out int length)        {            Console.WriteLine(name);            length = name.Length;        }        public void TestRef(string name, ref int length)        {            Console.WriteLine(name);            Console.WriteLine(length);            length = name.Length;        }    }}
C#脚本内容

三、C#中调用Lua

1.通过Lua lua = new Lua();创建一个Lua解释器,作为操作的对象

2.生成Lua‘变量并对Lua变量进行赋值lua["num"] = 123;

3.Dostring调用lua解释器执行字符串内容,其返回值可以用object[]来接收

object[] values=lua.DoString("return num,str");

4.lua.DoFile("myLua.lua");//解释lua文件(lua脚本需同样放置在[工程名\bin\Debug]文件夹下)

////静态方法注册到lua解释器中            //lua.RegisterFunction("StaticMethod", null, typeof(Program).GetMethod("StaticMethod"));            //lua.DoString("StaticMethod()");            ////非静态方法注册到lua解释器中            //Program program = new Program();            //lua.RegisterFunction("NormolMethod", program, program.GetType().GetMethod("NormolMethod"));            //lua.DoString("NormolMethod()");


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不知道怀孕照了x射线怎么办 腹部照了x光片照了三次怎么办 像在工厂戴的静电帽弄丢了怎么办 诈骗犯把钱被转到别人账户怎么办 狗狗5个月在家随地大小便怎么办 上课放屁放的快没憋到老是放怎么办 丈夫有外遇并跟小三有一儿子怎么办 借款夫妻双亡借出去的钱怎么办? 橡胶底的劳保鞋开胶了怎么办? 求部队停止有偿服务内部超市怎么办 晋江买了全本还是有防盗章节怎么办 宝宝没有穿衣服的地方长疙瘩怎么办 詹姆斯士兵12魔术贴老是掉怎么办 手机版本不支持陌陌视频聊天怎么办 私人单位不给员工写收入证明怎么办 cad图形缩小后找不到图了怎么办 离婚了老婆嫁给了别人怎么办 对方开车撞伤人逃逸不赔钱怎么办 帮老板开车撞伤人老板不愿赔怎么办 我开车撞人现在伤者住院怎么办 B照驾驶证扣3分怎么办l 驾驶证被盗后被别人拿去消分怎么办 碰瓷的手碰我后视镜怎么办 摩托被盗监控录像器没有记录怎么办 车贷逾期车被贷款公司拖走了怎么办 发现邻居家小孩偷了我的钱该怎么办 孕晚期挺着大肚子好累怎么办 古墓丽影崛起东西满了怎么办 塞尔达传说大师剑耐久没了怎么办 冒险岛遇见超能力者全屏挂机怎么办 当危险来临时该怎么办作文400字 生气把孩子手掌内侧打肿了怎么办 驾驶证未满一年扣12分怎么办 在高速上超速百分之10以下怎么办 中兴手机重启死机开不了机怎么办 太胖了太自卑了该怎么办 儿子因为长的胖特别自卑怎么办? 苹果ld叫我检查身份信息怎么办 我家墙让对面给漂水了怎么办 如果你流落到荒岛上你会怎么办 手机迅雷下载版权方不给下载怎么办