加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C#调用MATLAB库文件

(2018-08-20 11:32:51)
分类: 翰林堂

1、在Matlab里写一个带两个数组参数并输出两个数组值的函数([addRlt,minusRlt]=MatrixAddMin(a,b)),该函数调用两个函数分别为addRlt=Addfun(a,b)minusRlt=Minfun(a,b),其中一个在函数MatrixAddMin文件内,另一个为单独函数文件。

http://s2/bmiddle/001jcKoHzy7mYrsI2d331&690  

http://s15/bmiddle/001jcKoHzy7mYruMnZs3e&690

2、将上面两个函数文件打包成C#的函数库。

选择MATLAB软件菜单中APP菜单,下拉找到应用程序部署 library compiler,点击并进行设置。由于针对C#进行部署,TYPE格式里选中.NET Assembly,在EXPORTED FUNCTIONS中点击添加matlab编写的函数,将MatrixAddMin函数和Minfun函数选中打开进行添加。命名namespacematlablib(自己给命名空间取名字);选择从以安装的程序中打包,会自生成一个安装包,移植到未安装Matlab软件的电脑上时,就需要安装生成的这个安装包。然后点击Package进行打包生成C#能调用的库文件。

http://s8/bmiddle/001jcKoHzy7mYrCI5aD47&690

http://s16/bmiddle/001jcKoHzy7mYrHabuv8f&690

 

3C#中调用Matlab生成的库函数dll文件

3.1matlab工程文件下的MatlabLib.dll库文件和matlab安装目录C:\ProgramFiles\MATLAB\R2017a\toolbox\dotnetbuilder\bin\win64\v4.0 下的MWArray.dll拷贝到VS工程下\bin\debug文件夹下(\CsharpCallMatllblib\bin\x64\Debug)。

http://s4/bmiddle/001jcKoHzy7mYrIDhfB33&690

VS新建工程时,解决方案配置选择Debug,解决方案平台需要编辑x64平台:

http://s9/bmiddle/001jcKoHzy7mYrJZTXqc8&690

 

3.2 VS中添加引用

VS解决方案中右击引用进行添加MatlabLib.dll MWArray.dll库文件。

http://s3/bmiddle/001jcKoHzy7mYrKUOyue2&690

http://s1/bmiddle/001jcKoHzy7mYrVLXMc50&690

3.3 将引用的库文件在.cs文件中添加命名空间

 

http://s9/bmiddle/001jcKoHzy7mYrXt0aAf8&690

3.4  C#调用Matlab生成的dll库的实例

先在C#中声明两个数组并初始化,声明两个输出接收的数组。

利用MWNumericArray类将C#中的二维数组转换成中间类型,            MWNumericArray agrsina = a;MWNumericArray agrsinb = b利用MWArray[]类将输入的两个中间类型转换成matlab函数的输入矩阵agrsin,输入只能是一个矩阵的数组类型。MWArray[] agrsin = new MWArray[] { agrsina, agrsinb }

声明一个中间类型的数组用于接收输出,MWArray[] agrsout = new MWArray[2]; //声明输出参数是两个MWArray元素类型,一定要写输出的个数。

调用Matlablib.dll中的函数,test.MatrixAddMin(2, ref agrsout, agrsin);需要输入三个参数,第一个参数2表明为输出矩阵的个数,输出矩阵前必须加ref标识,第三个参数为输入。

将输出的中间类型转换为C#的数组, MWNumericArray net_c = agrsout[0] as MWNumericArray; MWNumericArray net_d = agrsout[1] as MWNumericArray;  agrsout[0]表示为matlab输出的第一个矩阵,agrsout[1]表示为matlab输出的第二个矩阵。将中间类型转换成C#数组:c = (double[,])net_c.ToArray();d = (double[,])net_d.ToArray();     //将输出的Matlab矩阵中间类型转换为c#数组

http://s5/bmiddle/001jcKoHzy7mYrYJCba44&690

 


0

阅读 收藏 喜欢 打印举报/Report
后一篇:一抹回头泪
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有