Lua 与 C#交互
Lua 与C#交互
前提
Lua是一种嵌入式脚本语言,Lua的解释器是用C编写的,因此可以方便的与C/C++进行相互调用。轻量级 Lua语言的官方版本只包括一个精简的核心和最基本的库,这使得Lua体积小、启动速度快,也适合嵌入在别的程序里。
交互过程
- C#调用Lua:
由C#文件调用Lua解析器底层dll库(由C语言编写),再由dll文件执行相应的Lua文件。
- Lua调用C#:
1、Wrap方式:首先生成C#源文件对应的Wrap文件, 由Lua文件调用Wrap文件,再由Wrap文件调用C#文件。
2、反射方式:当索引系统API、dll或者第三方库时,如果无法将代码的具体实现进行代码生成,可采用此方式实现交互。缺点:执行效率低。
交互原理
主要通过Lua虚拟栈实现,所有类型的数据交换都通过虚拟栈完成
Lua 提供了两种索引方式操作虚拟栈,
正数索引:1 表示栈底
负数索引:-1 表示栈顶
操作流程
- C#调用Lua
由C#先将数据放入栈顶,由Lua从栈顶取出该数据并做出相应的处理, 然后返回对应的值到栈顶,最后再从C#从栈顶取出Lua处理完的数据,完成交互。
- Lua调用C#
先生成C#源文件所对应的Wrap文件(使用反射)或者编写C#源文件所对应的C模块,然后将源文件内容通过Wrap文件或者C模块注册到Lua解释器中,然后由Lua去调用。
代码流程
- C#调用Lua:
C#生成Bridge文件,Bridge调用dll文件(dll是C写的库),先调用Lua中的dll文件,再由dll文件执行Lua代码。
C# -> Bridge -> dll -> Lua / C# -> dll -> Lua
- Lua调用C#:
先生成Wrap文件(中间文件/配置文件),wrap文件把字段方法注册到lua虚拟机中(解释器luajit),然后Lua通过wrap就可以调C#了。
Lua -> wrap -> C#
垃圾回收
C# 和 Lua 都有各自的垃圾回收机制,为了避免冲突,当使用了对方代理对象时,代理对象会被缓存,并在 真实对象 被回收后,移除缓存,使 代理对象 也能被回收
Lua 传递至 C# 的对象,会通过 LuaAPI.luaL_ref 保持引用而不被回收,C# 这边对象被回收后,将其从 LUA_REGISTRYINDEX 表中移除,使其可以被 Lua 垃圾管理器回收
C#传递至Lua的对象,会在Lua注册为元表,生成原表数据时会将相关对象的被Lua回收的回调也注册到其中,当对象在Lua回收后,会将对象压栈,然后回调到C#。C#根据回调传递的Lua状态机指针,通过正数索引在Lua虚拟栈中获取对象索引并将其从缓存列表中移除,后续通过垃圾回收器进行回收。
参考资料
C#与Lua交互过程及原理
C#与Lua交互过程及原理
C语言和Lua之间交互的原理
CS与XLua交互原理研究
相关文章:
Lua 与 C#交互
Lua 与C#交互 前提 Lua是一种嵌入式脚本语言,Lua的解释器是用C编写的,因此可以方便的与C/C进行相互调用。轻量级 Lua语言的官方版本只包括一个精简的核心和最基本的库,这使得Lua体积小、启动速度快,也适合嵌入在别的程序里。 交…...
【办公类】大组工会学习(文心一言+Python批量)
背景需求: 每学期要写一份工会的大组政治学习读后感(9月-1月,共5次) 学习内容 9月、10月、11月、12月、1月的学习内容文字稿 在班级里,我擅长电脑工作,所以这种写的工作都包了。 中2班三位老师一共写3篇&…...
项目管理工作流是什么?项目管理工作流管理实战技巧!
项目管理工作流是指在协作过程中通过限制任务状态的流转进行流程控制的一种方式。项目从启动到完成所经历的一系列有序、可控的步骤和流程,它详细描述了项目执行过程中各项任务和活动的顺序、依赖关系、责任人以及完成标准等,是项目成功执行的重要保障。…...
leveldb源码剖析(二)——LSM Tree
LSM Tree LSM Tree:Log-Structured Merge Tree,日志结构合并树。是一种频繁写性能很高的数据结构。 LSM Tree将写入操作与合并操作分离,数据首先写入磁盘中的日志文件(WAL),随后写入内存缓存,…...
三十六、Gin注册功能-检查账号是否存在
一、初始化 1、在cms.go中添加数据库连接方法 func connDB(app *CmsApp) {mysqlDB, err : gorm.Open(mysql.Open("root:rootroottcp(localhost:3306)/?charsetutf8mb4&parseTimeTrue&locLocal"))if err ! nil {panic(err)}db, err : mysqlDB.DB()if err !…...
什么是期权对冲?
今天期权懂带你了解什么是期权对冲?期权对冲的选择取决于投资者的市场预期和风险承受能力,通过合理使用期权对冲策略,可以有效减少风险并优化投资组合的表现。 期权对冲是什么? 期权是一种支持双向交易的投资产品,期…...
什么是数据库课程设计?
文章目录 前言一、课程设计目的二、课程设计流程三、设计要点四、示例项目总结 前言 数据库课程设计是一个综合性的实践过程,旨在通过实际项目的设计与实现,加深学生对数据库理论知识的理解和应用能力。 以下是一个关于数据库课程设计的基本框架和要点&…...
走进低代码报表开发(二):高效报表设计新利器
在前面的文章中,我们已经详细介绍了勤研低代码开发平台的报表数据源可视化设计,接下来,让我们一起来继续了解勤研低代码平台的报表设计,在当今数字化快速发展的时代,高效便捷的开发工具对于企业和开发者来说至关重要。…...
校园水电费管理|基于java的校园水电费管理小程序系统 (源码+数据库+文档)
校园水电费管理 目录 基于java的校园水电费管理小程序系统 一、前言 二、系统设计 三、系统功能设计 小程序端 后台功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕…...
java设计模式 桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们都可以独立地变化。桥接模式通过将继承改为组合,实现了在不修改现有类的情况下,动态地切换和扩展抽象类与其具体实现…...
如何利用大数据技术来识别和预防网络赌博行为?
1.构建赌博账户识别模型:通过大数据分析和机器学习技术,建立智能风险防控体系,对账户进行全生命周期管理,精准打击和切断不法分子的资金链条 。 2.分析资金流动:利用大数据技术监测和分析异常资金流动,识别…...
N-152基于java贪吃蛇游戏5
开发工具eclipse,jdk1.8 文档截图: N-152基于java贪吃蛇游戏5...
从线段中搜寻提取闭合轮廓(三)
1.前言 做底层和数据的调试问题也是个麻烦事,如果没有方便的可视化工具辅助,那将令人感到痛苦,借助可视化的工具可以让我们高效、省心,进而心情舒畅,重要的是可以提高调试效率。 当然可视化工具也分不同层次的…...
最全面的递归算法详解,一篇足矣(高手必备)
在编程中,递归和循环是两种常用的控制结构,各有其独特的优缺点。理解这两者的特点和应用场景,对于编写高效、可读的代码至关重要。 什么是递归? 递归是一种强大的编程技术,允许函数在其定义中调用自身。递归通常涉及…...
数据结构(2)单向链表排序和双向链表操作
一单向链表的插入排序 void insertion_sort_link(link_t* plink) { // 如果链表头为空,直接返回 if(NULL plink->phead) { return; } // 初始化指针,p指向当前已排序部分的最后一个节点 node_t* p plink->phead; // ptemp指向待插入的…...
OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 拟合一条直线到2D或3D点集。 fitLine 函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑iρ(ri)来拟合一条直线到2D或3D点集,…...
Mysql基础练习题 1757.可回收且低脂的产品(力扣)
编写解决方案找出既是低脂又是可回收的产品编号。 题目链接: https://leetcode.cn/problems/recyclable-and-low-fat-products/description/ 建表插入数据: Create table If Not Exists Products (product_id int, low_fats ENUM(Y, N), recyclable …...
Nginx调优,有这篇就够了
目录 1. 工作进程数量 2. Nginx最大打开文件数 3. Nginx事件处理模型 4. 开启高效传输模式 5. 连接超时时间 6. proxy调优 7. fastcgi 调优 8. gzip 调优 9. expires 缓存调优 10. 防盗链 11. 内核参数优化 1. 工作进程数量 #根据cpu个数自动调整工作进程数量 work…...
Java语言程序设计基础篇_编程练习题*18.17 (数组中某个指定字符出现的次数)
题目:*18.17 (数组中某个指定字符出现的次数) 编写一个递归的方法,求出数组中一个指定字符出现的次数。需要定义下面两个方法,第二个方法是一个递归的辅助方法。 public static int count(char[] chars, char ch) public static int count(…...
实时(按帧)处理的低通滤波C语言实现
写在前面: 低通滤波采用一般的FIR滤波器,因为本次任务,允许的延迟较多,或者说前面损失的信号可以较多,因此,涉及一个很高阶的FIR滤波器,信号起始段的信号点可以不处理,以及…...
Graphormer实际作品分享:10个典型分子(CCO/c1ccccc1/C=O等)预测结果集
Graphormer实际作品分享:10个典型分子预测结果集 1. 模型介绍与核心能力 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个模型在OGB(Open Graph Benchmark)和PCQM4M等分子基准测试…...
2269 上市公司智慧供应链对数字创新的平均处理效应指标【ATT】(2000-2024)
数据来源上市公司年报时间跨度2000-2024区域跨度全国所有上市公司数据格式数据格式为Excel形式数据简介本数据集旨在全面测度中国上市公司智慧供应链建设的政策冲击效应,涵盖了2000年至2024年A股上市公司的长周期面板数据。作为研究数字经济与实体经济深度融合的关键…...
【ZGC性能调优终极指南】:20年JVM专家亲授5大实战瓶颈突破法
第一章:ZGC核心机制与性能边界全景透视ZGC(Z Garbage Collector)是JDK 11引入的低延迟垃圾收集器,专为处理TB级堆内存与毫秒级停顿目标而设计。其核心突破在于并发标记、并发重定位与着色指针(Colored Pointers&#x…...
突破4大技术壁垒!MediaPipe TouchDesigner让实时视觉交互创作效率提升300%
突破4大技术壁垒!MediaPipe TouchDesigner让实时视觉交互创作效率提升300% 【免费下载链接】mediapipe-touchdesigner GPU Accelerated MediaPipe Plugin for TouchDesigner 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe-touchdesigner 核心价值&…...
丹青幻境功能全解析:宣纸UI、动态LoRA、文艺交互实操
丹青幻境功能全解析:宣纸UI、动态LoRA、文艺交互实操 1. 数字艺术创作新范式 在数字艺术创作领域,丹青幻境Z-Image Atelier带来了一场界面革命。这款工具将4090显卡的强大算力隐藏在仿古宣纸界面背后,为创作者提供了前所未有的沉浸式体验。…...
Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路
Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路 你是不是也想用AI生成和自己声音一模一样的语音?Fish Speech 1.5就能帮你实现这个愿望!这个强大的语音合成工具不仅能生成自然流畅的语音,还能通过参…...
douyin-downloader:抖音音频高效提取全攻略
douyin-downloader:抖音音频高效提取全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批…...
GLM-4.1V-9B-Base成本优化指南:GPU显存管理与推理性能调优
GLM-4.1V-9B-Base成本优化指南:GPU显存管理与推理性能调优 1. 为什么需要关注大模型推理成本 大模型在带来强大能力的同时,也伴随着高昂的GPU算力成本。GLM-4.1V-9B-Base作为一款9B参数量的视觉语言大模型,在实际部署中常常面临显存不足、推…...
新手如何借助快马平台AI生成代码,轻松入门蓝桥杯经典题型
作为一个刚接触编程的新手,参加蓝桥杯这样的比赛可能会觉得无从下手。特别是看到题目要求实现算法时,往往不知道如何把问题拆解成代码。最近我发现用InsCode(快马)平台可以很好地解决这个问题,它能根据题目描述直接生成可运行的代码ÿ…...
OFA模型在VMware虚拟机中的开发测试环境搭建
OFA模型在VMware虚拟机中的开发测试环境搭建 对于很多刚接触AI模型开发的个人开发者或学生来说,最大的门槛往往不是算法本身,而是硬件。一块性能足够的独立GPU价格不菲,让很多人在起步阶段就望而却步。难道没有物理GPU,就真的没法…...
