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

  需要的工具: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#调用Matlab生成的dll方法的更多相关文章

  1. C#调用Matlab生成的Dll

    问题描述:最近开发需要调用matlab生成的DLL,在New MWNumericArray 对象的时候报错,提示未将对象引用到对象的实例. 问题分析:因为MWArray.dll是Matlab提供的DL ...

  2. c++调用matlab生成的Dll动态连接库

    点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R ...

  3. asp.net下调用Matlab生成动态链接库

    对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置 ...

  4. 示例 - 如何在NodeJS中调用SS生成的DLL

    要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS中生成DLL, 请查看: S ...

  5. C++调用C#生成的DLL文件的各种问题

    C++调用C#生成的DLL文件: 首先选择建立一个C#的类库,然后再按照需求编写需要的函数 之后,对于C++调用过程需要注意的几点: 1.使用#using <....some.dll>指出 ...

  6. #Lua:Lua调用C++生成的DLL库

    Lua调用C++生成的DLL库 本文参考了某大佬的博客,写得十分详细,推荐!!! 需求: 在之前的求解器中添加了Lua库,使得程序可以在Lua脚本中实现自定义函数功能,考虑到未来可能需要与第三方程序库 ...

  7. php调用C#生成的dll(二)

    根据上一篇博文,php调用c#生成的动态库,运行测试时报Fatal error: Class 'COM' not found in XXXXXXXXX 原因是php.ini中未开启COM组件的应用,解 ...

  8. Java採用JNI调用VC++生成的dll(Java与C++交互)

    应项目需求,须要android调用java,java再调用C++实现android一个图片匹配的功能,我们作为java组须要和C++和Android进行交互.以下是java和C++採用JNI的方式进行 ...

  9. Delphi 调用C# 编写的DLL方法

    近来,因工作需要,必须解决Delphi写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个“ ...

随机推荐

  1. 关于cocos2d安装时编译不成功(个人心得)

    在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...

  2. .Net 利用消息在进程间通讯实现进程互操作

    有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据:还有可以使用网络端口实现进程间通讯.共享一片内存区域记录及 ...

  3. 跟我一起学写jQuery插件开发方法(转载)

    jQuery如此流行,各式各样的jQuery插件也是满天飞.你有没有想过把自己的一些常用的JS功能也写成jQuery插件呢?如果你的答案是肯定的,那么来吧!和我一起学写jQuery插件吧!     很 ...

  4. 理解ROS话题

    首先需要打开一个终端在里面运行roscore: roscore 再打开一个终端,在里面运行一个turtlesim_node节点: rosrun turtlesim turtlesim_node 打开另 ...

  5. Linux学习之crontab定时任务

    为当前用户创建cron服务 1.  键入 crontab  -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...

  6. 浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用

    在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,write 也不会一直阻塞.但实际上pol ...

  7. Android 一个抽奖应用的逆向破解全流程之加固自己应用

    转自: <a href="http://www.pedant.cn/2014/07/22/crack-a-draw-app/">http://www.pedant.cn ...

  8. VS Code - Debugger for Chrome

    VS Code - Debugger for Chrome调试JavaScript的两种方式   VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于 ...

  9. python基础--模块&包

    一.模块 1.模块是程序 任何Python程序都可以作为模块导入. 程序的保存也很重要,如果想把程序保存在C:\python (Windows)目录下,需要告诉解释器在哪里寻找模块了. >> ...

  10. rsyslog 基本组成

    Facility 定义日志消息的来源,以方便对日志进行分类,facility 有以下几种: --kern 内核消息 --user 用户级消息 --mail 邮件系统消息 --daemon 系统服务消息 ...