C#调用matlab编译的DLL

本文介绍了如何将matlab中的函数封装成DLL,并在C#中调用。

1、准备打包的函数,将matlab中生成Butterworth滤波器系数的函数进行封装。

function out = getFilterCoe(N,wn)
[num,den] = butter(N,wn);
out = [num,den];
end

2、在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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值