C#调用matlab编译的DLL | 您所在的位置:网站首页 › matlab的dll文件 › C#调用matlab编译的DLL |
本文介绍了如何将matlab中的函数封装成DLL,并在C#中调用。 1、准备打包的函数,将matlab中生成Butterworth滤波器系数的函数进行封装。 function out = getFilterCoe(N,wn) [num,den] = butter(N,wn); out = [num,den]; end2、在matlab中输入"libraryCompiler"打开MATLAB Compiler (1) 第1步选择".NET Assembly"; (2) 第2步通过右侧的"加号"选择文件"getFilterCoe.m"; (3) 第3步修改输出的DLL的名称,此处DLL名称为"Butterworth"; (4) 第4步修改类的名称为"FilterCoe"; (5) 第5步点击"Package"开始打包。 3、打包完成后当前文件夹下生成了一个名为"getFilterCoe"的目录,该目录下有三个文件夹和一个文件。 (1) for_redistribution目录下是一个名为MyAppInstaller_web.exe的程序,该程序引导式的安装生成的DLL和MATLAB的runtime。 (2) for_redistribution_files_only目录包含了部署所需要的文件。 (3) for_testing除了部署所需文件之外,还提供了一些源码。 (4) PackagingLog.html是打包日志。 4、创建C#项目 项目中引用"MWArray.dll"和for_redistribution_files_only目录中的"Butterworth.dll",其中"MWArray.dll"位于C:\Program Files\MATLAB\R2018a\toolbox\dotnetbuilder\bin\win64\v4.0\MWArray.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MathWorks.MATLAB.NET.Arrays; using Butterworth; namespace Butterworth { class Program { static void Main(string[] args) { double fs = 2048; double cutoff = 512; FilterCoe filter = new FilterCoe(); MWArray N = 4; MWArray wn = cutoff / (fs / 2); MWArray SOS = filter.getFilterCoe(N, wn); double[,] coe = (double[,])SOS.ToArray(); Console.WriteLine(coe.Length); Console.ReadKey(); } } }5、错误处理 FilterCoe filter = new FilterCoe(); 这一句可能会报下面的错误。 查看错误详细信息发现是由于找不到"mclmcrrt9_4.dll"导致的 解决方法:安装对应matlab版本的MCR(Matlab compiler runtime),重启VS即可。 MCR下载地址: https://ww2.mathworks.cn/products/compiler/matlab-runtime.html |
CopyRight 2018-2019 实验室设备网 版权所有 |