当前位置: 首页 > 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.xdnf.cn/news/1189063.html

相关文章:

  • 访问者模式感悟
  • 泰山派GPIO编译 ADB下载 万用表测量GPIO电压
  • 【ELasticsearch】节点角色分类与作用解析
  • OpenCV学习探秘之二 :数字图像的矩阵原理,OpenCV图像类与常用函数接口说明,及其常见操作核心技术详解
  • 分治算法 (Divide and Conquer)原理、及示例-JS版
  • AI 编程工具 Trae 重要的升级。。。
  • 经典IDE之Turbo C
  • nginx的 `root` 和 `alias` 笔记250726
  • 0.深度学习环境配置步骤
  • VTK交互——ClientData
  • 英语听力口语词汇-8.美食类
  • (AC)Playlist
  • 【橘子分布式】gRPC(番外篇-监听流)
  • 15.6 DeepSpeed+Transformers实战:LLaMA-7B训练效率提升210%,显存直降73%
  • 前端设计中如何在鼠标悬浮时同步修改块内样式
  • Cgroup 控制组学习(一)
  • 基于深度学习的图像分类:使用Inception-v3实现高效分类
  • 前端基础知识Vue系列 - 29(怎么处理vue项目中的错误)
  • vue 脚手架配置代理
  • RS485转Profinet网关配置指南:高效启动JRT激光测距传感器测量模式
  • 深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell
  • Qt 线程池设计与实现
  • HTML 音频/视频
  • 从一个“诡异“的C++程序理解状态机、防抖与系统交互
  • 2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
  • 二叉搜索树(Binary Search Tree)详解与java实现
  • 【RK3568 PWM 子系统(SG90)驱动开发详解】
  • 记录和分享抓取的数字货币和大A时序数据
  • k8s:将打包好的 Kubernetes 集群镜像推送到Harbor私有镜像仓库
  • 容器化成本优化:K8s资源请求与限制的黄金法则——从资源画像分析到25%成本削减的实战指南