- 系统平台
win10 64bit - 软件版本
Visual Studio:VS2017
MATLAB: MATLAB R2018b
注:MATLAB的版本不低于VS,否则调用失败。 - 设置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库的不适合做外发软件。

本文介绍了如何在C#中调用MATLAB R2018b生成的DLL,以及如何将多个m文件合成为一个DLL。详细步骤包括在MATLAB中设置编译器、使用deploytool或Library Compiler创建.NET Assembly,并在C#项目中添加MWArray.dll和MATLAB_DLL.dll的引用。需要注意的是,运行时可能需要安装MCR,并且平台需保持一致,调用速度虽快,但不适用于外发软件。

4594

被折叠的 条评论
为什么被折叠?



