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

相关推荐
筱璦8 小时前
期货软件开发 - C# 调用 HQChart 指标计算 C++ 动态库
c++·microsoft·c#
武藤一雄10 小时前
C# 异常(Exception)处理避坑指南
windows·microsoft·c#·.net·.netcore·鲁棒性
步步为营DotNet10 小时前
剖析.NET 11 中 Native AOT 在高性能客户端应用的极致实践
.net
slandarer11 小时前
MATLAB | 如何使用MATLAB绘制弧形图/弧长链接图(arc diagram)
matlab
步步为营DotNet13 小时前
深度探索.NET Aspire在云原生应用性能与安全加固的创新实践
安全·云原生·.net
武藤一雄13 小时前
WPF中ViewModel之间的5种通讯方式
开发语言·前端·microsoft·c#·wpf
雨浓YN13 小时前
OPC UA 通讯开发笔记 - 基于Opc.Ua.Client
笔记·c#
ghie909013 小时前
基于学习的模型预测控制(LBMPC)MATLAB实现指南
开发语言·学习·matlab
我是唐青枫14 小时前
C#.NET TPL Dataflow 深入解析:数据流管道、背压控制与实战取舍
c#·.net
cici1587415 小时前
非线性模型预测控制(NMPC)基于CasADi的MATLAB实现
开发语言·matlab