(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库的不适合做外发软件。