欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#调用Matlab生成的dll方法的详细说明

程序员文章站 2024-02-17 09:41:28
  其实整个过程比较简单,但是需要心细一点。   需要的工具:vs2005及以上版本,matlab2008b及以上版本,另外非常重要的需要安装一个matlab compi...

  其实整个过程比较简单,但是需要心细一点。

  需要的工具: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了。