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

  1. 系统平台
    win10 64bit
  2. 软件版本
    Visual Studio:VS2017
    MATLAB: MATLAB R2018b
    注:MATLAB的版本不低于VS,否则调用失败。
  3. 设置MATLAB对外接口
    (1)选择编译器
    >>mbuild -setup
    C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第1张图片

(2)生成DLL文件
方法1:
>>deploytool
选择Library Compiler:
C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第2张图片

方法2:
直接在上面的APP中选择,Library Compiler:
C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第3张图片

C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第4张图片

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

(3)编写C#程序:
添加两个依赖库:MWArray.dll、MATLAB_DLL.dll
C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第7张图片

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

添加名称空间:

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();
            
        }
    }
}


结果如下:
C#调用MATLAB生成的DLL以及多个m文件生成一个DLL_第8张图片

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

你可能感兴趣的:(C#,MATLAB,c#,MATLAB)