MATLAB程序转C# WPF,dll集成,混合编程
工作中遇到一个需求,有一部分算法的代码需要MATLAB来进行处理,而最后需要集成到C#中的wpf项目中去,选择灵活性更高的dll,去进行集成。(可以简单理解为:将MATLAB的函数,变为C#中类的函数成员,进行相关调用和函数编写)
对于MATLAB的程序部分,不需要知道里面的MATLAB具体语法逻辑,它提供一个函数,函数可能需要传入参数,或许会有输出。 接下来,我将通过一个示例,来讲解一下将MATLAB接入wpf项目中,并且测试其效果。
1. 原始MATLAB程序,一个后缀为.m的文件
用MATLAB软件打开,可以看到,也就是这个.m文件具体能够实现什么功能点,为了保密原则,我将无关信息打码。内容主要就是一个函数,函数输入一个需要处理的数据所在的路径,最后输出处理的结果。(MATLAB中用 function end 来定义函数)

在原始软件中调用,也很简单,和普通的函数调用一样,在命令行窗口输入函数名加上参数,回车即可运行,会输出函数调用结果。
![]()

2.将MATLAB程序转为dll
1) 下载MCR
命令行窗口输入mcrversion 看是否有下载MCR
![]()

如果提示没有,就 输入命令下载 mcrinstaller ,或者自己去官网找相关的版本下载
![]()
等待下载完成后,再次输入指令 mcrinstaller 有路径则说明下载成功

2)MATLAB程序打包为dll
- 命令行输入deploytool
- 选择library complier
- 选择指定项、添加自己的.m文件(如果有多个.m文件,在第二步全部添加即可)、修改类名(可改可不改,c#中调用时会用)
![]()


设置好后,点击packet 打包,等待打包完成


会生成如下的文件结构

生成的dll文件在for_redistribution_files_only里

3) 将dll引入wpf程序
1. 将readUSBData.dll(MATLAB程序生成的dll)文件复制到C#文件目录bin\Debug文件夹下
2.将MWArray.dll文件也复制到C#文件目录bin\Debug文件夹下,自行去安装位置寻找


3. 项目中添加引用



添加using引用 :
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
调用如下:

或者也可以在右边打开对象浏览器,来查看该dll的结构

4)修改运行的目标平台为 x64

修改后如下:
运行效果如下,和MATLAB中输出保持一致:

3. 文档看不明白的话,强推视频,跟着操作即可
链接:
https://www.bilibili.com/video/BV1Z54y157qz/?spm_id_from=333.337.search-card.all.click&vd_source=2d0578bc27bdc3553296e35d0c76de2d
参考文章
https://www.cnblogs.com/eniac12/p/4390845.html
https://www.cnblogs.com/straight/p/14612246.html
https://blog.csdn.net/yty2545340913/article/details/123127784
附代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;namespace CSDNT
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}/// <summary>/// 测试dll的button 后台代码逻辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void test_click(object sender, RoutedEventArgs e){readUSBdata.Test test = new readUSBdata.Test();var result = test.readUSBdata(@"C:\Users\rangu\Desktop\test\11");Console.WriteLine(result);}}
}
xaml

相关文章:
MATLAB程序转C# WPF,dll集成,混合编程
工作中遇到一个需求,有一部分算法的代码需要MATLAB来进行处理,而最后需要集成到C#中的wpf项目中去,选择灵活性更高的dll,去进行集成。(可以简单理解为:将MATLAB的函数,变为C#中类的函数成员&…...
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
文章目录 一、什么是 Mybatis Plus 特性 二、Spring Boot 3.0 集成 Mybatis Plus三、Mybatis Plus 查询示例 1、普通查询2、分页查询 参考 一、什么是 Mybatis Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只…...
nvidia_gpu_exporter 显卡监控
导入 grafana/dashboard.json https://github.com/utkuozdemir/nvidia_gpu_exporter/blob/master/grafana/dashboard.json参考 nvidia_gpu_exporter...
WebSocket 的封装使用
import { ElMessage } from "element-plus";// 全局WebSocket实例 let ws null; let isConnected false; let currentWsUrl ; // 用于存储当前的wsUrl let baseURL ws://XXX.com:8081;const initWebSocket (wsUrl, sendData) > {return new Prom…...
SqlSession的线程安全问题源码分析
🎮 作者主页:点击 🎁 完整专栏和代码:点击 🏡 博客主页:点击 文章目录 SqlSession 是线程安全的吗?为什么说是线程不安全的?事务管理问题 数据库连接的共享问题 一级缓存线程安全问题…...
Java 8 及经典面试题全解析
Java 是目前非常流行的编程语言之一,其强大的生态系统和丰富的功能使得它在企业级开发中占据重要地位。在面试中,Java 的基础知识、集合框架、多线程、JVM,以及 Java 8 的新特性是重点考查内容。本文将结合 Java 8 和经典知识点,为…...
MySQL:安装配置(完整教程)
这里写目录标题 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统(RDBMS)…...
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...
高性能网络框架--fstack
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 Fstack 是一个高性能的网络框架,主要用于构建高性能的网络应用程序,特别是在处理大量并发连接时。它基于 Linux 的 epoll 机制,使用了多线程和事件驱动的编程模型。以下是对 …...
Unity Mesh生成Cube
1. 配置一个Cube的每个面的数据 一共是6个面,每个面包含的数据包括4个顶点的相对顶点坐标(Cube的中心为原点),法线方向,UV坐标,顶点渲染顺序,以及这个面用到的材质,因为这里是Top&am…...
2、pycharm常用快捷命令和配置【持续更新中】
1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…...
Go语言方法和接收器类型详解
Go语言方法和接收器类型详解 1. 方法接收器类型 1.1 值接收器 值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。 type Person struct …...
Flutter:打包apk,详细图文介绍(一)
困扰了一天,终于能正常打包apk安装了,记录下打包的流程。建议参考我这篇文章时,同时看下官网的构建说明。 官网构建并发布 Android 应用详情 1、AS创建Flutter项目 2、cmd执行命令 生成一个sunluyi.jks的文件,可以自行把sunluyi替…...
Vue.js组件开发-实现动态切换菜单简单示例
在Vue.js中,实现动态切换菜单通过组件化开发和Vue的响应式数据绑定来实现。 示例: 展示如何创建一个可以动态切换菜单的Vue组件。 首先,需要定义一个Vue组件,该组件将包含菜单项和用于切换菜单的状态。 1. 创建Vue组件 <t…...
如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程
简介 在本教程中,我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时,确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中,我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…...
17爬虫:关于DrissionPage相关内容的学习01
概述 前面我们已经大致了解了selenium的用法,DerssionPage同selenium一样,也是一个基于Python的网页自动化工具。 DrissionPage既可以实现网页的自动化操作,也能够实现收发数据包,也可以把两者的功能合二为一。 DressionPage的…...
【HarmonyOS之旅】HarmonyOS概述(一)
目录 1 -> HarmonyOS简介 2 -> HarmonyOS发展历程 3 -> HarmonyOS技术特性 3.1 -> 硬件互助,资源共享 3.1.1 -> 分布式软总线 3.1.2 -> 分布式设备虚拟化 3.1.3 -> 分布式数据管理 3.1.4 -> 分布式任务调度 3.1.5 -> 分布式连接…...
chatwoot 开源客服系统搭建
1. 准备开源客服系统(我是用的Chatwoot ) 可以选择以下开源客服系统作为基础: Chatwoot: 开源,多语言,跟踪和分析,支持多渠道客户对接,自动化和工作流等。源码Zammad: 现代的开源工单系统。Fr…...
30分钟搭建 Typecho 个人博客教程
Typecho是一款PHP博客程序,相比于WordPress,Typecho显得更加的轻量级和简洁。现在越来越多的人倾向于用Typecho来搭建个人博客——众所周知,能跑WordPress的机器都不便宜。 Typecho是一款国人团结打造的开源博客系统,和WordPress…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
