C#调用Matlab生成的dll方法的详细说明
其实整个过程比较简单,但是需要心细一点。
需要的工具:vs2005及以上版本,matlab2008b及以上版本,另外非常重要的需要安装一个matlab compiler runtime,这个文件(mcrinstall.exe)在安装完matlab之后就会在安装文件夹下存在,需要搜索一下(因为不同版本的matlab可能存放位置不同),把它安装一下就ok了。
接下来在matlab中写一个m文件,当然是一个函数啦。然后在matlab命令行下运行deploytool,在图形界面里选.net组件,然后进入一个工程目录的界面,新建工程,工程的名字就是.net组件的名字(例如sinfit),在其下面的目录表示.net类名(例如sinfit),在类名上点右键"add file...",把matlab的.m函数文件(例如sinfit.m)选进去。最后进行编译(build the project),生成的目录下有以工程名命名的dll文件(例如sinfit.dll)。ok,dll生成好了。
接下来打开vs,导入两个dll,一个前面生成的那个dll,一个是<matlabroot>/dotnetbuilder/bin/win32/v2.0/mwarray.dll(如果找不到就搜一下)。然后在工程里加入下面的引用:
using mathworks.matlab.net.arrays;
using mathworks.matlab.net.utility;
using sinfit;
ok,可以用了,用法是实例化一个sinfit的对象,然后调用里面的matlab函数,不过有一个问题需要注意的是,matlab的输入和输出数据都是矩阵,很特殊,在.net中叫做mwarray,它还有一个子类叫做mwnumericarray,它们的使用方法简单说明如下:
创建一个mwnumericarray对象的方法:mwnumericarray para = new mwnumericarray(mwarraycomplexity.real, 4, 2);这样就创建了一个矩阵,如果要把它映射给一个double型的二维数组,则需要创建数组double[,] temp = new double[2, 4];这个地方就要注意了,正好反过来。然后如果是mwnumericarray赋给double[,]的话可以采用mwnumericarray的toarray方法,如double[,] paras = (double[,])para.toarray(mwarraycomponent.real);其中para是mwnumericarray对象。如果是double[,]赋给mwnumericarray的话,那就直接赋值就ok了。
上一篇: c# 生成随机时间的小例子