当前位置: 首页 > news >正文

NLua和C#交互

 在Lua脚本内引入C# dll:luanet.load_assembly('NLuaTestDll')

在Lua脚本内引入C# 定义的类:TestClass=luanet.import_type('NLuaTestDll.TestClass')

将C#对象导入到Lua脚本:_luaEnv["xxx"] = xxx

将C#中定义的方法导入Lua脚本:

            var method = typeof(xLuaForm).GetMethod("StaticMethod");
_luaEnv.RegisterFunction("StaticMethod", null, method);

执行脚本后获取Lua内变量:_luaEnv["xxx"]

        public void Print(string msg){MessageBox.Show(msg);}private Lua _luaEnv;public xLuaForm(){InitializeComponent();_luaEnv = new Lua();_luaEnv.LoadCLRPackage();//_luaEnv.RegisterLuaClassType(typeof(Person), typeof(Person));}public static void StaticMethod(string msg){MessageBox.Show(msg);}private void simpleButton1_Click(object sender, EventArgs e){//_luaEnv.DoString("require 'CSharpCallLua'");var script = $@"luanet.load_assembly('NLuaTestDll')TestClass=luanet.import_type('NLuaTestDll.TestClass')Person=luanet.import_type('NLuaTestDll.Person')import(""System.Windows.Forms"")MessageBox.Show('hello001')local newForm = Form()newForm:ShowDialog();newForm:Dispose();person = Person()person.Name = 'Winter'person.Age = 10StaticMethod(person:ToString())participant = {{""张三"", ""李四"", ""老王"", ""狗蛋"", ""铁剩""}}StaticMethod('abc')--require 'CSharpCallLua'--person = {{Name = 'Tom', Age = 10}}name = 'jerry'form.Text = 'lua test'form:Print('hello  ' .. #participant)function add(a, b)return a+bend
";_luaEnv["form"] = this;var method = typeof(xLuaForm).GetMethod("StaticMethod");_luaEnv.RegisterFunction("StaticMethod", null, method);_luaEnv.DoString(script);var person = _luaEnv["person"] as Person;MessageBox.Show(person.Name);var addFun = _luaEnv.GetFunction("add");var resObj = addFun.Call(10, 20);}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace NLuaTestDll
{public class TestClass : IFoo1{public int foo(){return 101;}}public interface IFoo1{int foo();}public class Person{public string Name { get; set; }public int Age { get; set; }public string ToString(){return $"{Name} -- {Age}";}}
}

http://www.dtcms.com/a/298889.html

相关文章:

  • 6G通感算
  • Spring Boot DFS、HDFS、AI、PyOD、ECOD、Junit、嵌入式实战指南
  • 学习游戏制作记录(剑投掷技能)7.26
  • Kotlin 数据容器 - List 扩展(转换操作、过滤操作、排序操作、分组操作、集合操作、归纳操作、窗口操作)
  • 一款基于react-native harmonyOS 封装的【文档】文件预览查看开源库(基于Harmony 原生文件预览服务进行封装)
  • 【深度之眼机器学习笔记】04-01-决策树简介、熵,04-02-条件熵及计算举例,04-03-信息增益、ID3算法
  • OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集
  • 今天凌晨,字节开源 Coze,如何白嫖?
  • 【Vue2】结合chrome与element-ui的网页端条码打印
  • 使用Spring Boot创建Web项目
  • QT开发---网络编程上
  • 【CTF-WEB-反序列化】利用__toString魔术方法读取flag.php
  • 传统框架与减震楼盖框架地震动力响应分析与有限元模拟
  • USB Type-c
  • 《P3313 [SDOI2014] 旅行》
  • 关于我司即将对商业间谍行为进行法律诉讼的通知
  • C++学习笔记(十:类与对象基础)
  • 洛谷刷题7.25
  • TwinCAT3编程入门1
  • 【Mybatis】分页插件及其原理
  • 蓝桥杯java算法例题
  • powershell 实现批量把文件夹下的bmp文件转换为jpg
  • 操作系统:设计与实现(Operating System Design Implementation)
  • deepseek本地部署,轻松实现编程自由
  • 小架构step系列25:错误码
  • 储粮温度预测新方案!FEBL模型用代码实现:LSTM+注意力+岭回归的完整流程
  • 【map计算】自定义map计算
  • KNN 算法进阶:从基础到优化的深度解析
  • GaussDB 数据库架构师修炼(九) 逻辑备份实操
  • 动态规划Day1学习心得