Lua与.Net互调
来源:互联网 发布:淘宝号注册 编辑:程序博客网 时间:2024/05/11 20:00
Lua是一种很好的扩展性语言,由C语言编写,Lua解释器被设计成一个很容易嵌入到宿主程序的库
我们可以使用LuaForWindows或则LuaInterface得到LuaInterfaxe,dll文件
在这里我提供LuaInterface包,方便大家下载点击打开链接
【开发环境的配置】
VS新建一个C#控制台应用程序
解压下载下来的luainterface资源包,根据如下图的路径找到三个.dll文件
将这三个.dll文件添加到应用
右键引用,选择‘添加文件’
点击浏览,找到工程文件目录,选中这三个.dll文件
只需选择LuaInterface.dll,点击确定
【C#中调用Lua代码】
在配置好了环境后,开始用C#调用Lua代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using LuaInterface;namespace MyLuaInterfaceObj{class Program{static void Main(string[] args){//创建Lua解释器Lua lua = new Lua();/*定义变量lua["num"] = 2;lua["name"] = "LiuJunLiang";Console.WriteLine(lua["num"]);Console.WriteLine(lua["name"]);*//*获得返回值lua.DoString("number=2");lua.DoString("name='LiuJunLiang'");Object[] obj = lua.DoString("return number,name");foreach (Object m_obj in obj){Console.WriteLine(m_obj);}*//*执行lua文件lua.DoFile("text.lua");*//*将一个C#普通函数注册到lua中*/Program program = new Program();lua.RegisterFunction("MyLocalMethod",program,program.GetType().GetMethod("MyLocalMethod"));lua.DoString("MyLocalMethod()");//执行lua里的函数/*将一个C#静态函数注册到lua中*/lua.RegisterFunction("MyStaticMethod",null,typeof(Program).GetMethod("MyStaticMethod"));lua.DoString("MyStaticMethod()");Console.ReadKey();}public void MyLocalMethod(){Console.WriteLine("HelloWord");}public static void MyStaticMethod(){Console.WriteLine("HelloWord2");}}}
【在Lua中访问C#的属性和方法】
require "luanet"--获取程序集luanet.load_assembly("System")--获取类,会自动匹配最合适的构造方法IntValue=luanet.import_type("System.Int32")--调用该类中静态方法num=IntValue.Parse("54321");print(num);--获取自己项目的程序集luanet.load_assembly("MyLuaInterfaceObj");--Program类也是自己建的Program=luanet.import_type("MyLuaInterfaceObj.Program");--调用该类中的OutMethod方法--由于第二个参数是out,故调用时不需要加入第二个参数out_a,out_b =Program:OutMethod(1)print(out_a,out_b)--out_a=0,out_b=2--调用该类中的RefMethod方法--ref需要加入参数out_a,out_b =Program:OutMethod(1,2)print(out_a,out_b)--out_a=0,out_b=2
//Program.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using LuaInterface;namespace MyLuaInterfaceObj{class Program{static void Main(string[] args){//创建Lua解释器Lua lua = new Lua();//执行lua代码lua.DoString("LuaCallCSharp.lua");Console.ReadKey();}public void MyLocalMethod(){Console.WriteLine("HelloWord");}public static void MyStaticMethod(){Console.WriteLine("HelloWord2");}public int OutMethod(int a,out int b){b = a + a;a = 0;return a;}public int RefMethod(int a,ref int b){b = a + a;a = 0;return a;}}}
注意:
一.如果项目编译中发现说无法找到DLL("lua51.dll")或者("luanet.dll")
此时你需要lua51.dll和luanet.dll文件放在Debug生成目录下
二.如果编译报如下图错误,则将.lua文件编码格式改为ANSI格式
如果有什么问题可以参考我的项目文件点击打开链接
2 0
- Lua与.Net互调
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua与.net的CLR相互调用
- Lua 与java 互调
- lua 与 C++互调
- Lua与c++互调
- lua与c互调--c调用lua
- lua与c互调--lua调用c
- Lua程序设计笔记之七: lua与c互调
- Lua学习 2) —— Android与Lua互调
- Lua .与:
- 【Lua】Lua与C交互
- cocos2dx3.X中C++与lua互调
- java中list与listfiles区别
- ionic2界面调试,浏览器,chrome
- SQL 练习
- Bootstrap 标签页(Tab)插件
- iOS 面试题
- Lua与.Net互调
- Windows中notepad以UTF-8编码保存文件时实际上用的是UTF-8+BOM编码方式
- throw 、throws的区别
- java中原码、反码和补码--时钟理解法
- [Hackerrank Week of Code 30]A Graph Problem
- 外观模式
- 动态规划- 0-1背包问题
- Efficient Graph-Based Image Segmentation原文的详细解析
- Android插件化框架和热修复技术的资料收集和汇总