C#调用MATLAB生成的DLL以及多个m文件生成一个DLL

本文介绍了如何在C#中调用MATLAB R2018b生成的DLL,以及如何将多个m文件合成为一个DLL。详细步骤包括在MATLAB中设置编译器、使用deploytool或Library Compiler创建.NET Assembly,并在C#项目中添加MWArray.dll和MATLAB_DLL.dll的引用。需要注意的是,运行时可能需要安装MCR,并且平台需保持一致,调用速度虽快,但不适用于外发软件。
  1. 系统平台
    win10 64bit
  2. 软件版本
    Visual Studio:VS2017
    MATLAB: MATLAB R2018b
    注:MATLAB的版本不低于VS,否则调用失败。
  3. 设置MATLAB对外接口
    (1)选择编译器
    >>mbuild -setup
    在这里插入图片描述

(2)生成DLL文件
方法1:
>>deploytool
选择Library Compiler:
在这里插入图片描述

方法2:
直接在上面的APP中选择,Library Compiler:
在这里插入图片描述

在这里插入图片描述

①:C#调用选择:.NET Assembly
②:点击加号可以选择一个或多个m文件(此时实现多个m文件合成一个dll);
③:生成的DLL的名称,默认是第一个m文件的名称,可以修改成其他名称;
④:Class Name是调用的时候用到的Class1,也可以修改;
⑤:事实证明,在其他电脑上运行的时候还是需要安装MCR的
⑥:点击Package生成文件。
生成以下文件,选择第二个文件夹中的dll文件。
在这里插入图片描述在这里插入图片描述

(3)编写C#程序:
添加两个依赖库:MWArray.dll、MATLAB_DLL.dll
在这里插入图片描述

添加引用→浏览→分别选择这两个文件→确定。
在这里插入图片描述

添加名称空间:

using MathWorks;
using MathWorks.MATLAB;
using MathWorks.MATLAB.NET;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using MATLAB_DLL;

编写程序:(由于MATLAB版本是64bit,因此编译平台选择x64
①输出一个参数时:

function result=myadd(a,b)
result=a+b;
end

②输出多个参数时:

function [res_add,res_sub,res_mul,res_div]=cal(a,b)
res_add=a+b;
res_sub=a-b;
res_mul=a*b;
res_div=a./b;
end

具体程序如下:

using System;
using MathWorks.MATLAB.NET.Arrays;
using Matlab_dll;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载Matlab_dll中的Class1
            Matlab_dll.Class1 matdll = new Matlab_dll.Class1();
            //输出参数为一个时
            MWArray a = 1, b = 2, c;//MWArray为调用MATLAB时,参数类型为MWArray
            c = matdll.myadd(a, b);//调用myadd
            Console.WriteLine("输出一个参数时:");
            Console.WriteLine("a + b = ");
            Console.WriteLine(c);

            //输出参数为多个时
            MWArray[] input = new MWArray[] { a, b };//将输入参数放在一个MWArray[]中
            MWArray[] output = new MWArray[4];//设置输出参数的个数
            matdll.cal(4, ref output, input);//第一个参数表示输出个数
            Console.WriteLine("输出多个参数时:");
            Console.WriteLine("a + b = ");
            Console.WriteLine(output[0]);//输出第一个结果
            Console.WriteLine("a - b = ");
            Console.WriteLine(output[1]);//第二个
            Console.WriteLine("a * b = ");
            Console.WriteLine(output[2]);//第三个
            Console.WriteLine("a / b = ");
            Console.WriteLine(output[3]);//第四个

            //如果需要用到调用结果进行其他计算时
            MWNumericArray re_tmp = (MWNumericArray)output[0];
            double[,] re = new double[1, 1];//MATLAB处理的是矩阵,定义的要赋值的数组不能是一维
            re = (double[,])re_tmp.ToArray();
            double xx = 10;
            xx += re[0, 0];
            Console.WriteLine("");
            Console.WriteLine("xx:{0:2f}", xx);

            Console.ReadKey();
            
        }
    }
}


结果如下:
在这里插入图片描述

注:
1.加载MATLAB DLL 的Class1时较慢;
2.编译平台和MATLAB一致;
3.调用MATLAB函数运算还是很快的;
4.调MATLAB库的不适合做外发软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值