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文件夹下,自行去安装位置寻找

  1. 项目中添加引用

添加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

附代码

cs 复制代码
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

相关推荐
唐青枫3 小时前
别只会看日志:C#.NET SOS 调试扩展从 Dump 到内存泄漏排查
c#·.net
Evand J6 小时前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Evand J8 小时前
【MATLAB例程,图像降噪7】高斯加权滑动窗口滤波,用于图像降噪,带质量评价,附代码下载链接
开发语言·图像处理·matlab·滑动窗口·滤波·降噪·图像滤波
yswenli10 小时前
基于C#开发网站视频嗅探下载工具——BrowserVideoGrabber
c#·videodownload·webvideodownload·videograbber
Lost of 程序猿10 小时前
M2 实战:询价与采购订单聚合落地——跨聚合一致性、领域事件与 Outbox
开发语言·c#·asp.net·.net
菜鸟~noob23312 小时前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
可编程芯片开发12 小时前
基于压电能量收集和MPPT最大功率跟踪算法的IoT压力传感器电源系统Simulink建模与仿真
物联网·matlab·simulink·mppt·压电能量收集·iot压力传感器
菜鸟~noob23312 小时前
【电子战】第12篇:TDOA 定位——双曲线与等时差线【含matlab代码】
开发语言·matlab
有梦想的咕噜12 小时前
Newtonsoft.Json (Json.NET) 常用方法汇总
linux·json·.net
Polevne13 小时前
C# GRPC 一元与双向流
linux·算法·c#