MATLAB与C#混合编程(2种⽅法)
写程序少不了参考别⼈的经验,因为参加项⽬需要,在进⾏系统开发的时候,需要⽤到MATLAB和C#的混合编程,为此总结了⼀下经验~
1.编程⼯具 我使⽤的是VS2013 及MATLABR2015b,⼀般来说,混合编程对版本要求不是很⾼
2.先总体介绍⼀下两种混合编程的⼤致区别:
(1)⽬前使⽤最⼴的⽅法是先封装MATLAB程序为dll⽂件,然后在VS中进⾏引⽤,便可以在VS中调⽤其封装的函数,封装dll的⽅法MATLAB⾥有,并且⽐较简单,后⾯会附上详细的教程。封装dll的引⽤⽅法⽐较受欢迎可能是这种⽅法相对来说⽐较普及,且封装dll适合任何程序,也就是说你⽤MATLAB写的程序度可以封装成dll,听起来是不是很cool,没错,不仅仅是某种函数的算法,只要是可以⽤的程序度可以封装。
这种⽅法最⼤的缺点也就是在封装dll⽂件时,MATLAB必须要配置好环境,很多没有调试成功主要问题也出现在这,后⾯详细介绍
(2)当然第⼆种⽅法就不需要封装成dll了,感觉是不是很棒,你只需要将你编写的MATLAB⽂件放在你⽤VS创建项⽬的bin⽂件夹下⾯,这种⽅法的局限性在于它更适合于函数数值计算,因为在调⽤传递参
数的时候,⼀般的数值,字符串,泛型类型度可以,只要不是像什么shp图形⽂件数据或者其他类型的⽂件数据,因为⼩编在使⽤这种⽅法的时候就碰到过shp⽂件数据⽆法直接传参,也就不得不使⽤了封装dll的⽅法,好了,说了折磨多,赶紧上点⼲货。
⼀:调⽤dll⽂件形式
1.确保安装好MATLAB及VS,版本要求不⾼,但是确保MATLAB是安装的破解⽂件,也就是必须是包含“mcc”以及“compiler”⽂件,如果不是完全破解,在后期的MATLAB编译以及打包会出现错误。
2.封装MATLAB程序为dll
1.打开MATLAB,在出现的界⾯中依次点击“新建----->函数”
在这⾥我就编辑⼀个最简单的画图函数,之后在窗⼝命令⾏中输⼊deploytool, 出现后选择第三个 Library Compiler如图:然后接下来便是选择设置,按照图上操作;最后选择Microsoft Framework时,⼀般选择4.0;
完成后出现如下图,接下来就是等待了;
3.VS⾥⾯配置引⽤环境并调⽤函数
⾸先VS⾥⾯新建⼀个窗体项⽬,我这取名叫test,选中并点击右键选择添加引⽤,按“浏览”查,到你⽣成dl的l⽂件夹,然后添加之
后在VS⾥新建项⽬,然后写上代码:记得using drew;
代码如下图所⽰:
好了,运⾏后,结果如下图所⽰ :
第⼆种⽅法:直接调⽤MATLAB函数代码
这种⽅法很⽅便,值得注意的是:1.MATLAB程序可以放在VS创建⼯程项⽬的bin⽂件夹下的debug⾥2.VS项⽬中需要引⽤MLApp.dll,⼀般在添加引⽤时,在COM组件选项中寻3.最好要安装好matlab软件,这⾥⽐较容易出错
下⾯贴出C#中如何调⽤MATLAB编写的矩阵相加的函数add(),c=a+b;
private void button1_Click(object sender, EventArgs e)
{
MLApp.MLApp matlab = null;
Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application");
matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.MLApp;
matlab.Visible = 0;//可见性
string path_project = Directory.GetCurrentDirectory(); //⼯程⽂件的路径,如bin下⾯的debug
string path_matlab = "cd('" + path_project + "')"; //⾃定义matlab⼯作路径这⾥我注释调⽤
matlab.Execute(path_matlab);
matlab.Execute("clear all");
double[,] c;
double[,] a={{1,2,3},{2,3,4}};
double[,] b={{7,8,9},{1,1,1}}; //初始化变量
double[,] _a = new double[a.GetLength(0), a.GetLength(1)];
matlab.PutFullMatrix("a", "base", a, _a );
double[,] _b=new double [b.GetLength(0),b.GetLength(1)];
vs编程软件matlab.PutFullMatrix("b", "base", b, _b);
string comman = @"c=add(a,b)";
matlab.Execute(comman);
//获取调⽤结果值
var result1 = matlab.GetVariable("c", "base");
c= result1 as double[,];
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论