C_与Matlab混合编程的两种模式分析

合集下载

C_Builder与Matlab混合编程的两种方法

C_Builder与Matlab混合编程的两种方法

科学技术与工程6卷C++Builder与Matlab混合编程的两种方法杜高鹏翟正军1*徐隽(西北工业大学软件学院,西安710065;dgp_2003@126.com;西北工业大学计算机学院1,西安710072)摘要详细论述了C++Builder与Matlab混合编程的两种实现方法。

一是在C++Builder中使用COM技术调用Matlab数据。

二是脱离Matlab环境,通过动态连接库方式实现对Matlab工具箱函数的调用。

分别给出一个详细的例子。

这两种方法都充分发挥了C++Builder与Matlab的优势,为科学研究和工程技术提供了更强的技术支持。

关键词C++BuilderMatlabCOM组件Mediva软件平台DLL中图法分类号TP312文献标识码BMatlab是一个高度集成的系统,它把数值计算和可视化环境集成到一起,非常直观,而且提供了大量的函数,使其越来越受到人们的喜爱。

它集科学计算、图象处理、声音处理于一体,具有极高的编程效率。

近年来,Matlab已经从最初的“矩阵实验室”渗透到科学与工程计算的多个领域,在自动控制、信号处理、神经网络、模糊逻辑、小波分析等多个方向,都有着广泛的应用。

BorlandC++Builder是一种新颖的可视化编程语言,它既具有C++语言的灵活性、高效性,又具有可视化编程的便利性,功能丰富强大,界面友好,使用十分方便,但是在矩阵运算、数值分析、工程计算等方面,功能则稍嫌不足;在工程应用中,我们一般用C++Builder语言编写应用程序,实现交互界面、数据采集和端口操作等,但C++Builder在数值处理分析和算法工具等方面,其效率远远低于Matlab语言。

在准确方便地绘制数据图形方面,Matlab语言更具有无可比拟的优势。

此外,Matlab还提供功能强大的工具箱。

但Matlab的缺点是不能实现端口操作和实时控制。

因此,若能将两者结合运用,实现优势互补,将大大提高工作效率。

C#与Matlab混合编程的几种方式

C#与Matlab混合编程的几种方式

C#与Matlab混合编程的几种方式主要参考资料: 《Matlab C# Book》,我看的是第一版的电子书,网上可以搜到。

说实话,我觉得C#与Matlab混合编程相比VC与Matlab混合编程没有啥优势,基本上还是通过P/V Invoke操作Matlab mcc编译器生成的C语言版本的DLL。

此外,速度上也慢的吓人-_-下面简单写写C#与Matlab混合编程的4种方式(可能还不够全,欢迎补充):1. 通过从Matlab的*.m文件中生成C语言版本的DLL具体过程:1) 在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);2) 使用Matlab的mbuild -setup选择编译器,我机器上的编译器有两个LCC 和VC2008(注意如果使用做应用的话,建议编译器选VC2008,否则C #中会告诉你DLL找不到Entry Point)3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h 文件中有导出的函数原型。

4) 建立C#工程,并将前面的dll拷贝到合适路径,使用[ DllImport( "myplusl ib.dll ", CallingConvention = CallingConvention.Cdecl)] 将.h文件中的函数使用C#的语法声明。

一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。

5) 使用CsharpMatlabCompilerVer4.cs将C#中的数据类型和Matlab中的矩阵等类型进行变换。

该文件定义了MatlabCSharp类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。

Matlab和C混合编程的几种方法比较..

Matlab和C混合编程的几种方法比较..

Matlab和C混合编程的几种方法比较杨允军整理并调试第一部分概述Matlab是Mathworks公司于1982年推出的一套高性能的数值计算和可视化软件,到2005年已发行到R14(Matlab 7.0),主流版本有4.0,5.3,6.1,6.5。

它是一种面向科学计算和数值分析的软件,涵盖了通信、短阵运算、图像处理、金融分析、模糊控制、自动控制、信号处理、系统仿真、微分计算等方面。

它提供了强大的科学运算、灵活的程序设计流程、高质量的数字图像处理等功能,突出的优点是强大的运算功能和近乎完美的绘图功能。

然而Matlab自身存在的一些不足使其在开发应用系统时受到局限,主要表现为以下几个方面:(1)Matlab语言是一种解释执行的脚本语言,其程序运行效率低,特别是在编制大型复杂的应用系统时达不到理想的效果。

(2)Matlab编写的M文件是文本文件,很容易被直接读取,无法保护开发者的劳动成果。

(3)Matlab编写的程序只能在Matlab的平台下运行,不具备跨平台的能力,可移植性差。

(4)开发应用系统的界面能力差,很难做出友好的应用界面。

以上几点是VC等高级编程语言所专长的,而VC等高级编程语言在工程计算、复杂的数学计算、数字图形处理方面以及特定的学科领域的计算处理上远远不及Matlab。

因此将二者结合起来,各取所长,将能更好地满足实际应用中的需要。

为了实现混合编程,Matlab 5.0以后的版本自带了C语言编译器(Compiler),可以将M 文件转换为C—MEX或C/C ++程序。

根据是否需要Matlab环境,一般将Matlab与VC ++混合编程分为两大类:Matlab在后台运行和可以脱离Matlab环境运行。

归纳起来Matlab与C接口有如下几种方法:1.Matlab引擎(Engineer)采用客户/服务器的计算方式,通过Windows的ActiveX通道和Matlab相结合。

在具体的应用中,VC ++的程序作为前端客户机,通过调用MatlabEngineer在后台与Matlab服务器建立连接,实现动态通信。

VC和MATlAB混编(笔记)

VC和MATlAB混编(笔记)

基于COM的VC/MATLAB混合编程方法Matlab是一种脚本语言,程序运行效率低下,而且不能脱离Matlab软件环境,不能直接用于商用软件的开发。

VC具有代码效率高,执行速度快等优点,但是自身提供的数学函数相对较少,当遇到复杂的数值运算时,编写复杂的程序代码将大幅度延长软件开发周期。

VC++由于其丰富得人机界面,高效的执行效率已经成为基于Windows平台下开发商业软件的必备工具。

然而,VC++对于复杂的数值运算就有点“力不从心”了。

因此,混编可以充分发挥出各自的有点,开发出更加好用的软件。

VC和Matlab的混合编程有多种方法:①Matlab engine方法②直接调用Matlab的C/C++数学函数库③用Matlab自带的Matlab Compiler④使用Matcom工具(可脱离Matlab软件环境)⑤使用Matlab的combuilder工具生产COM组件(可脱离Matlab软件环境)1、基于COM的VC/MATLAB混合编程方法自Matlab6.5版本开始,新推出来的Combuilder支持把用Matlab编写的程序做成com 组件,供其他语言调用。

该方法实现简单,通用性强,成为VC与Matlab混合编程最有效的方法。

COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。

Matlab6.5新推出来的Combuilder就是把用Matlab 编写的程序做成com组件,供其他语言调用。

该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注重:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司推荐的使用方法。

例:基于COM的MATLAB与VC混编示例1、打开matlab新建一个M文件,这里采用与上例相同的函数,注意:不能是脚本文件。

VC与MATLAB混合编程实现方法及具体实例研究

VC与MATLAB混合编程实现方法及具体实例研究

VC与MATLAB混合编程实现方法及具体实例研究夏欣【期刊名称】《青岛理工大学学报》【年(卷),期】2012(033)003【摘要】Vc++与MATLAB混合编程的方法主要有2种类型,一种是在MATLAB中调用VC,另外一种是在VC中调用MATLAB.主要研究VC中调用MATLAB的方法,该类型的方法可以方便快捷地编制需要绘制图形的用户可执行程序.比较了该类型中几种方法的优缺点,并采用VC中调用Matcomc++矩阵库函数方法,给出了一个在VC++6.0和Matcom4.5环境下实现的两者混合编程的实例.%Two kinds of method could realize VC++ and MATLAB hybrid programming. One is calling VC in MATLAB,the other is just on the contrary, calling MATLAB in VC. This article mostly studies calling MATLAB in the VC method, which can realize user exe- cutable program conveniently and quickly. Advantages and disadvantages are compared be- tween these methods, and a hybrid program example in VC++6.0 and Matcom 4. 5 is giv- en, which adopts calling MATLAB C++ matrix in VC method.【总页数】6页(P83-88)【作者】夏欣【作者单位】青岛理工大学理学院,青岛266033【正文语种】中文【中图分类】TP319;TH7【相关文献】1.基于MATCOM转化法的VC与MATLAB混合编程实现汽车I曲线的模拟绘制[J], 任龙辉;肖婵;李腾飞2.VC与Matlab混合编程实现图像处理 [J], 刘子霆;3.基于MATLAB与VC++混合编程实现配电网重构算法 [J], 李国胜;华泽玺;苗轶如4.基于VC与Matlab混合编程实现图像增强处理 [J], 刘大鹏5.VC++与Matlab混合编程实现光场光强的三维显示 [J], 杨入超因版权原因,仅展示原文概要,查看原文内容请购买。

Matlab与C_C_语言混合编程的几种方法

Matlab与C_C_语言混合编程的几种方法

" 嵌 入 1.. 生 成 的 文 件
在 !"#$"% 下 用 下 面 格 式 的 命 令 生 成 .99 文 件 , 假 定 要 编 译 的 函 数 名 为 Z75.#6?5[L"12 : 1..>#>T *99 Z75.#6?5[L"12 得到: Z75.#6?5[L"12’;99 , Z75.#6?5[L"12’.99 将 Z75.#6?5[L"12’.99 加 入 项 目 , 不做任何改动。 最 后 进行编 译 就 可 以 了 。
!
结束语
在 !"#$%!& 数 据 库 中 , 对 象 泛 指 库 中 所 有 组 成 部
分 。’(! 通 过 对 象 属 性 值 的 存取或 调 用 对 象 的 方 法 , 可以 对 所 有 对 象 进 行 管 理 。 块 表 是 一 个 集 合 对 象 )(*$+,-. , 调 用 其 !// 方 法 可 以 定 义 0 个 块 。 调 用 1$/2*345+2 对 象
能 很 强 , 使 用 它 可 以 用 类 似 15#*5C 的 语 法 编 写 % << 程 序, 十 分 方 便 。 虽 然 速 度 上 仍 然 比 普 通 的 % K %<< 程 序 慢 , 但 由 此 换 来 的 高开 发 效 率 和 可 靠 性 往 往 是 值 得 的 。 在 ’% 的 集 成 开 发 环 境 里 使 用 15#*5C , 可 以 利 用
$6%11H6$2’$6%
$6%1..’$6%
$6%V
656#!:!OP*S![)\_DISL< ; F F 初 始 化 !"#.?1 进 程 !1 3‘=‘. ; F F 定义变量, !1 为 !"#.?1 的 矩 阵 类 3 a.?$?5:-‘-‘-‘-@‘@-< ; F F 类 似 H?4 循 环 语 句 = a=65:3< ; F F 正弦函数 . a.?=:3< ; F F 余弦函数 9 $?#::*T:3<‘.‘3‘=<< ; F F 画出正弦和余弦函数 2 36#!: < ; F F 退 出 !"#.?1 进 程 b

Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库

Matlab与VC(MFC)混合编程(介绍Matcom与Matlab 引擎两种方式)文库

本文由wolf1sky贡献doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

Matlab 与 VC 混合编程 1:一、采用 Matcom1、目标1. 测试在 VC 中调用 MatrixC++库,生成矩阵并显示 2. 测试 VC 中调用.m 文件2、步骤2.1 目标 1<1>建立 VC 工程,添加库 v4501v.lib,有两种方法:?向工程中添加文件 v4501v.lib 在 Setting/link 中添加库 v4501v.lib(这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)二者选其一就可以了。

<2> 添加头文件 #include "matlib.h" (这样写的前题是 VC 路径设置正确,即在 Options/Directories 中设置,否则请注明详细路径)建议:最好在工程中把文件 matlib.h 添加进来,方便查看函数详细说明 <3>现在就可以调用 Matrix中的C++函数了,例子如下:// Init matcom initM(MATCOM_VERSION); winaxes(AfxGetMainWnd()->GetSafeHwnd()); Mm a,b; a = (BR(1),2,3,semi,4,5,6,semi,7,8,9); a = transpose(a); b = (BR(1),2,3,semi,4,5,6,semi,7,8,9); m_1.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f %3f %3f \r\n",a.r(1,1),a.r(1,2),a.r(1,3),a.r(2,1),a.r(2,2),a.r(2,3),a.r(3,1),a.r(3,2),a. r(3,3));//m_1 是一个 CEdit 控件 UpdateData(FALSE); exitM();2.2 目标 2<1>首先用 Matlab 调试成功以下两个有依赖关系的.m 文件文件 1:equation.m function y = equation(a,b) y = a * b; 文件 2:CallE.m % function name function [o1,o2] = CallE(x) if (nargin ~= 1) error('arguments must be inputed!'); endif (x == 1) a = reshape(1:9,3,3); elseif (x == 2) a = reshape(11:19,3,3); else error('input error'); end b = magic(3); o1 = equation(a,b); o2 = o1 + 1; <2>将以上两个文件放在同一个目录下,启动 MatCom 编译运行 CallE.m, >> CallE(2) 则在同一目录下生成一个 DEBUG(或者是 Release,在 MatCom 的菜单项 Configuration 中选择)目录下可以找到相应的.cpp 及.h 文件,把它们全部拷贝到 VC 工程目录下,也可以自己建一个文件夹 <3>在 VC 项目中添加这些文件,并在头部添加相应.h 的引用,如下: #include "./matlib/equation.h" #include "./matlib/calle.h" <4>添加调用函数的代码,如下: Mm a,b,c; a = BR(2); 表示输入参数到输出参数的间隔,《MatrixLIB user's 详见calle(a,i_o,b,c); //i_o 是一个间隔符,Guide》m_2.Format("%3f %3f %3f \r\n%3f %3f %3f \r\n%3f \r\n",b.r(1,1),b.r(1,2),b.r(1,3),b.r(2,1),b.r(2,2),b.r(2,3),b.r(3,1),b.r(3,2),b. r(3,3)); %3f %3fUpdateData(FALSE);3、遇到的问题及解决方案<1>当在 VC 工程中添加由 Matcom 转换的 cpp 及 h 文件后,注:如果在编译中出现下列错误:fatal error C1010: unexpected end of file while looking for precompiled headerdirective 解决:进行下列设置:工程->设置-> C/C++ 选择 precompiled headers 选解决:择第一或第二项:自动选择预补偿页眉,如图:<2>使用Matcom 后,生成Debug 版没问题,而生成Release 时链接出错,nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMT.lib(delete.obj) 解决:解决:将"Project 属性" -> "C/C++" -> "代码生成(codegeneration)" -> "运行时库(run-time library)" 项下修改应用程序的默认标准库版本,我修改成 Debug Multithreads 就可以了,原因是安装Matcom 时库为调试版<3>在其它机器上运行出错解决:解决:将 ago4501.dll v4501v.dll glu32.dll opengl32.dll 附带发布即可 <4>关闭程序后进程没有退出解决:解决:添加语句winaxes(m_hWnd);参考文献1、何东健等.《数字图像处理》.西安电子科技大学出版社.20032、邓科.浅析 VC 与matlab 接口编程(一). VC 知识库,41 期3、邓科.浅析 VC 与 matlab 接口编程(二). VC 知识库,42 期4、Matcom 参考手册Matlab 与 VC 混合编程 2:二、通过 Matlab 引擎与 VC 混合编程--飞狼编程宝典--明明知道选择你是一个错误,却为何那么地坚持这个错误……基于 Matlab 引擎的混合编程方式无法脱离 Matlab 环境,却为何还要使用它?根据本人的实践,对于一般应用,如矩阵运算,图像操作等,使用 Matcom 就已经足够,而且能够脱离 Matlab 那个巨大的环境而独立运行,但是,对于很多好用的 Matlab 工具箱,我们却无法直接在 VC 中调用。

vc和matlab的混合编程-Silence的日志-网易博客

vc和matlab的混合编程-Silence的日志-网易博客

vc和matlab的混合编程-Silence的日志-网易博客vc和matlab的混合编程技术 2008-10-29 23:14:29 阅读60 评论0 字号:大小订阅matlab真的是一个好东西,它的介绍我就不说啦,自己google 去,matlab在数学处理、数字图像方面的研究有很好的应用,只是他在与其他例如vc,vb,java的接合上显得比较的困难,似乎大家都在探讨这方面的问题,经过这些天的猛看猛试验,最终在matlab的COM接合上实现突破,并且正如matlab推荐的那样,真的非常的方便和通用,几乎可以处理所有的函数,包括图形图像的处理函数。

一般来说,vc调用matlab混合编程有以下几个途径:一、通过Matlab Engine方式Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。

用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。

采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。

二、直接调用Matlab的C/C++数学函数库Matlab中提供了可以供C/C++语言调用的C/C++数学函数库,其中包含了大量用C\C++语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。

MATLAB与C语言混合使用

MATLAB与C语言混合使用

MATLAB与C语言混用包括两个方面,即在MA TLAB平台上调用C语言资源,以及在C 语言的平台上调用MATLAB资源。

在MA TLAB平台上使用mex命令将C语言文件编译成MEX文件形式的共享库,以便MATLAB调用,C MEX型S-函数就是在MA TLAB平台上调用C语言资源的例子。

下面通过实例介绍在C语言平台上如何调用MATLAB资源。

首先,建立两个MA TLAB函数,分别实现计算和显示功能。

实现计算功能函数的内容如下:function y=mysum(x)y=sum(1:x);实现显示功能函数的内容如下:function mydisplay(x)disp(x);其次,建立C语言文件,其具体内容如下并保存为mysump.c#include<stdio.h>#include<math.h>#include"libmysum.h"main(int argc,char **argv){mxArray *N;mxArray *R=NULL;int n;n=5;mclInitializeApplication(NULL,0);libmysumInitialize();N=mxCreateDoubleScalar(n);mlfMysum(1,&R,N);mlfMydisplay(R);mxDestroyArray(N);mxDestroyArray(R);libmysumTerminate();mclTerminateApplication();}由于编译过程不支持中文注释,下面还是以程序的形式解释语句的含义:见mysump注释.c文件。

编译:mcc -W lib:libmysum -T link:exe mysum mydisplay mysump.c运行:mysum。

谈谈Matlab与CC++或C#的互调用(混合编程)

谈谈Matlab与CC++或C#的互调用(混合编程)

谈谈Matlab与CC++或C#的互调用(混合编程)记得当初一个师姐问我知不知道如何在Matlab里调用C++的程序,还真把我问住了。

因为我以前就知道C++调用Matlab的方法,这方面网上资料一大堆。

没想到现在自己突发奇想又遇到另外一个问题,Matlab如何调用C#开发的程序。

1、C/C++调用Matlab这方面资料太多了,随便搜一下“Matlab C++ 混合编程”。

2、Matlab调用C/C++3、C#调用Matlab这个我的博客Matlab分类有。

4、Matlab调用C#通常是两种方法:COM和非托管化/u/20090402/16/6db37a24-648c-4f8d-a353-42eab4c4bcbe.html/m/user_content.aspx?id=304113但是,事实上matlab call dll,这个dll本身就可以是.net开发的,Matlab提供了相关加载和转换的函数。

这才是本文的亮点。

下面是matlab的相关命令介绍/access/helpdesk/help/techdoc/ref/f16-35614.html#brxerx8-1Matlab使用.net数据的例子/access/helpdesk/help/techdoc/matlab_external/examplein dex.html下面是展示一些简单的例子和过程。

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h4 {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; mso-outline-level:4; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体; font-weight:bold;} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} pre {margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} tt {mso-ansi-font-size:12.0pt; mso-bidi-font-size:12.0pt; font-family:宋体; mso-ascii-font-family:宋体; mso-fareast-font-family:宋体; mso-hansi-font-family:宋体; mso-bidi-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1458570389; mso-list-template-ids:-282954118;} @list l0:level1 {mso-level-number-format:bullet; mso-level-text:?; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt; mso-ansi-font-size:10.0pt; font-family:Symbol;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->SampleProperties Class.using System;namespace netdoc{class SampleProperties{// string propertyprivate static string stringField = "The MathWorks";public static string stringProp{get { return stringField; }set { stringField = value; }}// read/write propertyprivate double doubleField = 8.9; public double doubleProp{get { return doubleField; }set { doubleField = value; }}// read-only propertyprivate double readField = 0; public double readOnlyProp{get { return readField; }}// write-only propertyprivate double writeField = 0;public double writeOnlyProp{set { writeField = value; }}}}Create Object. Load the assembly and create object obj : sampleInfo = NET.addAssembly('c:/work/NetSample.dll');obj = netdoc.SamplePropertiesMATLAB displays the object as follows:obj =netdoc.SampleProperties handlePackage: netdocProperties:stringProp: [1x1 System.String]doubleProp: 8.9000readOnlyProp: 0Methods, Events, SuperclassesMATLAB displays the stringProp , doubleProp , and readOnlyProp properties, but not the writeOnlyProp property. MATLAB also does not display properties defined with the private keyword, such as stringField and doubleField .View Property Values. To view the value of stringProp , type: obj.stringPropMATLAB displays:ans =The MathWorksUse Property Values. To use the properties, type:db1 = obj.doublePropdb2 = obj.readOnlyPropMATLAB displays:db1 =8.9000db2 =Modify Property Values. To modify the properties, type:obj.doubleProp = 5;obj.writeOnlyProp = 6;objMATLAB displays (in part):obj =Properties:stringProp: [1x1 System.String]doubleProp: 5readOnlyProp: 0To modify the static property stringProp , type:NET.setStaticProperty('netdoc.SampleProperties.stringProp', ...'This is a static property');newVal = obj.stringPropMATLAB displays:newVal =This is a static propertyUsing .NET Fields ExampleThe SampleFields class defines the following fields:· publicField· protectedFieldSampleFields Class.using System;namespace netdoc{class SampleFields{public Int32 publicField;protected string protectedField;}}Create Object. Load the assembly and create object obj : NET.addAssembly('c:/work/NetSample.dll')obj = netdoc.SampleFields;Modify Field Values. To set the value of the field publicField , type:myValue = 3;obj.publicField = myValueMATLAB displays:obj =netdoc.SampleFields handlePackage: netdocProperties:publicField: 3Methods, Events, SuperclassesThe publicField property is of type Int32 . When you set the value to myValue , which is of MATLAB type double , MATLAB automatically converts the value to the proper type, as described in Passing Data to a .NET Object . Type:class(myValue)class(obj.publicField)MATLAB displays:ans =doubleans =int32Limitations to Support of .NET PropertiesYou cannot pass a cell array to a property, or view protected properties in MATLAB.Example — Passing Data To a .NET Assembly将Matlab矩阵转变为.net数组/access/helpdesk/help/techdoc/matlab_external/brxe1ww-1.html#brzmvt8-1Example —Converting a Multidimensional .NET Array 将.net数组转变为Matlab矩阵/access/helpdesk/help/techdoc/matlab_external/brxe1w w-1.html#br1adia-1。

C++Builder与Matlab混合编程的两种方法

C++Builder与Matlab混合编程的两种方法


Ma a 是 一 个 高 度 集 成 的 系统 . 把 数 值计 算 tb l 它
和可 视 化 环 境 集成 到 一 起 . 常 直 观 . 非 而且 提 供 了
1 C + ule与Malb +B i r d t 混合编程的实现方法 a
C + ule与Mal 混合 编 程有 两种 实 现方 法 。 +Bi r d tb a
பைடு நூலகம்
可 执 行代 码 f l ee . l x 文件 的代码 ) 以被 其 它对 象 d 或. 可 执 行 。 即使 两个 对 象 使用 不 同语 言 来 编写 的 . 他们
可 以用 C M标准 来 进 行通 信 。在 C + ule 中使用 O + Bi r d C M技 术调 用Ma a 数据 实现方 法 如下 : O tb l () 1 根据 实 际需要 在 Ma a 中开 发算 法 , tb l 写成 函
B i e与Ma a 的 优 势 , 科 学 研 究 和 T 程 技 术 提 供 了 更 强 的技 术 支持 。 ul r d tb l 为 关键词 C + ul r Mal C M组 件 + B i e d tb O a M dv软 件 平 台 ei a DL L
中图法分类号
T 32 文献标识码 P1

大量 的 函数 , 其 越 来 越受 到人 们 的喜 爱 。它 集科 使 学 计 算 、 象 处 理 、 音 处 理 于 一 体 , 有 极 高 的 图 声 具 编 程效 率 。 年来 , t b 近 Ma a 已经从 最 初 的 “ 阵 实 验 l 矩 室 ” 透 到科 学 与 工 程 计 算 的多 个 领 域 , 自动 控 渗 在 制、 信号 处 理 、 经 网络 、 糊 逻 辑 、 波 分 析 等 多 神 模 小 个 方 向 , 有 着 广泛 的应 用 。B r n + B i e是 都 ol d C + ul r a d

Matlab与CC++混合编程Matlab调用C函数

Matlab与CC++混合编程Matlab调用C函数

Matlab与CC++混合编程Matlab调⽤C函数Matlab与C/C++混合编程有很多种⽅式,分别适⽤于不同的情况。

1. 程序主体⽤Matlab编写,有⼀些特别耗时的函数⽤C/C++改写来提⾼效率,或者已经有现成的C/C++函数,应⽤到Matlab程序中(本⽂属于这种情况)2. 程序主体⽤C/C++编写,部分程序想调⽤Matlab函数减少开发时间,本⽂不涉及这种情况,建议读者⾃⾏查阅Matlab帮助⽂档⼀点点废话Matlab有着⾮常详细的帮助⽂档,建议直接阅读其帮助⽂档,市⾯上很多Matlab书籍都是简单的翻译翻译帮助⽂档,例⼦都是照抄,还有很多错误和断章取义的地⽅,参考这样的书籍容易被带上弯路。

打开Matlab,按F1打开帮助,此部分内容在:MATLAB->Advanced Software Development->MATALB API for Other Languages什么是MEX-file简单来说MEX-file是⼀种预编译的,⽤其他语⾔(C/C++,Fortran)编写的函数库,可以直接被Matlab调⽤。

正如前⾯提到的,这种⽅式适⽤于两种情况:1. 程序中有⼀部分代码耗时巨⼤,想通过改写这部分函数提⾼速度2. 已经有⼤量C/C++或Fortran的函数库,想直接⽤Matlab调⽤,避免重复开发这两种情况⽤MEX-file的这种⽅案来解决都是⾮常合适的,因为这种调⽤⽅式⾮常⽅便,你需要注意地只是数据结构的转换。

这种⽅式⽀持C/C++和Fortran,本⽂主要将C/C++。

如何创建可供Matlab直接调⽤的MEX-file1.安装Matlab⽀持的编译器在Matlab命令窗⼝输⼊:mex -setup如果你的电脑已经安装了Matlab⽀持的编译器,这时候你应该会看到设置编译器的提⽰命令,跟着⼀步步下去就可以了。

注意:如果你电脑只安装了⼀个⽀持的编译器,这⼀步会⾃动⽤此编译器进⾏配置,如果有多个⽀持的编译器,Matlab会引导你选择要使⽤哪个编译器。

Matlab与C混合编程

Matlab与C混合编程

Matlab与C/C++混合编程接口及应用摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序设计语言,两者互补结合的混合编程在科学研究和工程实践中具有非常重要的意义。

从Matlab调用C/C++代码及C/C++调用m文件两方面,深入地研究了它们之间混合编程的原理和实现机制,并且给出了具体条件下的混合编程方法和步骤。

实验表明,给出的Matlab与C/C++混合编程接口及应用方法是有效、实用的。

1引言Matlab是当前应用最为广泛的数学软件,具有强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算等功能[1]。

利用这一完整的数学平台,用户可以快速实现十分复杂的功能,极大地提高工程分析计算的效率[2][3]。

但与其他高级程序[3]相比,Matlab 程序是一种解释执行程序,不用编译等预处理,程序运行速度较慢[4]。

C/C++语言是目前最为流行的高级程序设计语言之一[5]。

它可对操作系统和应用程序以及硬件进行直接操作,用C/C++语言明显优于其它解释型高级语言,一些大型应用软件如Matlab 就是用C语言开发的。

在工程实践中,用户经常遇到Matlab与C/C++混合编程的问题。

本文基于Matlab 6.5和VC6.0开发环境,在Windows平台下就它们之间的混合编程问题进行深入研究并举例说明。

2 Matlab调用C/C++Matlab调用C/C++的方式主要有两种:利用MEX技术和调用C/C++动态连接库。

在Matlab与C/C++混合编程之前,必须先对Matlab的编译应用程序mex和编译器mbuild 进行正确的设置[1]:对Matlab编译应用程序mex的设置:Mex –setup.对Matlab编译器mbuild的设置:Mbuild –setup.2.1调用C/C++的MEX文件MEX是Matlab Executable的缩写,它是一种“可在Matlab中调用的C(或Fortran)语言衍生程序”[6]。

MATLAB与VC混合编程.

MATLAB与VC混合编程.

MATLAB 与 VC 混合编程SCIE摘要:MATLAB 提供了很丰富的编程接口,可以通过这些接口使用其它语言来编写模块集成到 MATLAB 程序中,也可以在其它程序设计语言中调用 MATLAB 。

尽管如此,在某些情况下可能仍然不能满足某些特殊的要求, 本文从实际应用出发, 介绍了 MATLAB 与 VC 混合编程的一些方法。

需要特别说明的是:本文内容是针对MATLAB6.5和 VC6.0的,并不适应于其它版本的 MATLAB 。

关键词:混合编程 MATLAB VC 窗口嵌入一、 VC中使用编译得到的 C++源程序文件通过 MATLAB 的编译器我们可以将 m 代码编译为独立的可执行程序,从而达到脱离 MATLAB 、在未安装 MATLAB 的计算机上发布的目的。

但是这样做仍然不能满足如下要求: MATLAB设计的图形用户界面功能还不够强大,不支持表格、目录树以及分组单选按钮等控件;当在一个 GUI 中放置过多的控件时,速度会比较慢。

整个软件并不是以 MATLAB 为主开发的,需要把 MATLAB 编写的代码融合到软件主体中,而不是生成独立的程序。

需要修改 MALTAB 编译器自动生成的代码, 或在其中添加代码以实现特定的功能。

将 m 文件编译生成 C 或者 C ++代码,在 VC 中使用这些代码,就可以解决以上几个或者更多的问题。

在此之前,需要对 VC 的开发环境进行设置,添加MATLAB 的 Include 目录和 Library 目录,操作如下:启动 VC ,点击菜单 Tools-Options ,出现如下对话框:图表 1设置 Include 目录¾在 Show directories for下方的下拉框中选择 Include files,在 Directories 下方列表框的空白一行或者单击 Directories 右方的左起第一个按钮, 添加如下两个目录: $matlabroot\extern\include\cpp$matlabroot\extern\include¾在 Show directories for下方的下拉框中选择 Include files,在 Directories 下方列表框的空白一行或者单击 Directories 右方的左起第一个按钮, 添加如下两个目录: $matlabroot\extern\include\cpp$matlabroot\extern\include其中 $matlabroot为 MATLAB 的安装目录,如图表 2所示。

基于COM技术的C_与Matlab混合编程

基于COM技术的C_与Matlab混合编程

—87—基于COM 技术的C#与Matlab 混合编程姚光强,陈立平(国家农业信息化工程技术研究中心,北京 100097)摘 要:提出基于组件对象模型(COM)技术实现Visual C#与Matlab 混合编程的2种方法,一种是通过C#使用Matlab 提供的自动化服务,另一种是使用Matlab COM Builder 将M 语言文件编译成COM 组件供C#调用。

以地理信息系统中常用的空间插值分析为例给出了这2种方法的具体实现。

对两者进行比较,提出了各自的适用范围。

结果表明使用COM 技术实现混合编程能充分发挥Visual C#与Matlab 各自的特点,提高程序开发和运行效率。

关键词:Visual C#语言;Matlab 软件;混合编程;组件对象模型Integrated Programming Between C# and Matlab Based onComponent Object ModelYAO Guang-qiang, CHEN Li-ping(National Engineering Research Center for Information Technology in Agriculture, Beijing 100097)【Abstract 】Two approaches of integrated programming based on Component Object Model(COM) are introduced. One utilizes the automation server provided by Matlab. The other compiles the Matlab program written in M scripting language to component by using Matlab COM builder,then invoking it in Visual C#. The usual spatial interpolation algorithm in GIS is implemented by these two approaches. The advantages and defects of them are discussed, and the adaptive application range is suggested. The result is that the COM based methods for integration, which make full use of the two platforms, can speed up software development and improve its performance. 【Key words 】Visual C#; Matlab; integrated programming; Component Object Model(COM)计 算 机 工 程Computer Engineering 第34卷 第14期Vol.34 No.14 2008年7月July 2008·软件技术与数据库· 文章编号:1000—3428(2008)14—0087—03文献标识码:A中图分类号:TP3111 概述Matlab 是一种专门以矩阵形式处理数据的科学计算软件,广泛地应用于数值分析、控制系统、图像处理、数字信号处理等领域的分析、仿真和设计。

VC_与Matlab_Simulink混合编程的实现与研究

VC_与Matlab_Simulink混合编程的实现与研究

第7卷 第21期 2007年11月167121819(2007)2125685203 科 学 技 术 与 工 程Science Technol ogy and Engineering Vol .7 No .21 Nov .2007Ζ 2007 Sci .Tech .Engng .VC ++与Ma tl ab /Si m uli n k 混合编程的实现与研究曹罗生(湖南益阳职业技术学院计算机系,益阳413000)摘 要 介绍了将Matlab /Si m ulink 模型转换成目标语言模型的方法。

避免了模型仿真速度慢的问题,且降低了目标语言编程建模的工作强度。

重点探讨了VC ++与M atlab /Si m ulink 进行混合编程的方法,运用这些方法,可以在VC ++中方便地使用M atlab /Si m ulink 的数值计算能力。

关键词 仿真 RT W Si m ulink /Matlab VC ++中图法分类号 TP311; 文献标识码 A2007年7月4日收到 Matlab /Si m ulink 是近年应用广泛的一种科学计算仿真软件,但对于一些仿真实时性要求较高的场合,如串口通信、数据采集等仿真任务时,Matlab 环境就难以胜任。

C /C ++语言是一种执行效率较高的语言,将它与Real —Ti m e Workshop (RT W )子集相结合,采用C ++与Matlab 混合编程技术就可以实现Matlab /Si m ulink 模型向C /C ++语言模型的转换,满足仿真实时性的要求。

1 RT W 简介RT W 是和Matlab /Si m ulink 一起使用的一个工具,它可以直接从Si m ulink 模型生成代码,并且自动建立可以在不同环境下运行的程序,这些环境包括实时系统和单机仿真。

RT W 的应用场合十分广泛,主要包括以下几个方面:⑴实时控制:可以使用Matlab /Si m ulink 设计控制系统,并且从建立的图表模型生成代码,编译并载入它们到目标硬件。

VC与Matlab联合编程

VC与Matlab联合编程

VC++与Matlab混合编程的研究与实现开发者在线 更新时间:2007-10-19作者:朱立松帅亮安居白来源:计算机与信息技术本文关键词:VC++MATLAB编程Matlab是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,为科学研究、工程设计及众多学科领域提供了一种简洁、高效的编程工具。

但是Matlab使用的是解释性语言,大大限制了它的执行速度;源代码的公开不利于算法和数据的保密;局限于Matlab运行环境而不能用于开发商用软件。

Visual C++是Windows平台下主要的应用程序开发环境之一,它能方便实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。

但是在工程计算方面,和Matlab相比编程显得复杂的多。

因此实现VC与Matlab混合编程,使两者结合起来,协同工作,必将提高软件开发效率,使所开发的软件具有更高的性能,更大的应用范围,也可以为科学研究和工程技术提供更强的技术支持。

VC与Matlab混合编程的实现方案在VC环境中调用Matlab程序主要有以下几种方法:(1)用Matlab引擎,采用客户机/服务器(Client/Server)的计算模式。

在VC中设计程序框架,作为前端客户机,通过调用 Matlab引擎与后台Matlab 服务器建立连接,实现命令和数据信息的传递。

这种方式需要Matlab在后台运行,离不开Matlab环境。

不利于软件的开发,但是它可以充分利用Matlab的功能,包括调用工具箱函数和图形函数。

(2)用Matlab的编译器将.m源文件转化为 c、c++等各种不同类型的源代码,并在此基础上根据应用需要生成MEX文件、独立可执行应用程序等文件类型,大大提高程序的运行速度,提高代码的执行效率。

主要是使用mcc命令实现文件的转化。

但是这种方法不支持图形函数,不能编译一些Matlab的内建函数,并且转换的代码可读性不太好。

【文件】Matlab与C混合编程的方法研究与实现毕业论文

【文件】Matlab与C混合编程的方法研究与实现毕业论文

【关键字】文件Matlab与C混合编程的方法研究与实现摘要:文章探讨了MA TLAB与VC++的优缺点,介绍了VC++与Matlab混合编程的几种方法。

通过二者的结合,既有效地利用了MA TLAB强大的数值计算能力和众多的函数,大大减少程序设计的工作量,又继承了VC++良好的程序界面,证明是一种很好的程序设计方法。

具体说明了如何应用Matlab引擎实现混合编程以及如何利用MATCOM进行MATLAB和VC++混合编程,并将两种方法用于数字图像处理。

关键词:MATLAB;VC++;MA TCOM;引擎;混合编程;图像处理一、引言1、数字图像处理简介:图像技术由高到低分为三个层次:图像处理、图像分析和图像理解。

图像处理是比较底层的操作,它主要在图像像素级上进行处理,处理的数据量非常大。

数字图像处理最基本的目的就是改善图像,主要是按需要进行适当的变换突出某些有用的信息,去除或消弱无用的信息,如改变图像的对比度,去除噪声或强调边缘的处理等,其基本方法有:直方图修正、灰度变换、图像的频域特性、图像平滑、图像锐化等。

直方图是图像的重要统计特征,是表示数字图像中每一灰度级与该灰度级出现的频率数间的统计关系。

直方图能给出该图像的大致描述,如灰度范围、灰度级的分布、整幅图像的平均亮度等,但它不能完整地描述一幅图像。

通常用横坐标表示灰度级,纵坐标表示频数。

通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,我们可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均匀化,从而增加反差,使图像的细节清晰,达到图像增强的目的。

灰度变换是图像增强的一种重要手段,它可以使图像动态范围加大,使图像对比度扩展,图像更加清晰,特征更加明显。

灰度变换可分为线性、分段线性、非线性以及其他的灰度变换。

线性灰度变换实际上使曝光不充分的图像中黑的部分更黑,白的部分更白,从而提高对比度。

C#和MatLab的混合编程(充分利用二者的优势)

C#和MatLab的混合编程(充分利用二者的优势)

C#和MatLab的混合编程(充分利⽤⼆者的优势)C#和MatLab的混合编程,充分利⽤了winform的直观显⽰和matlab的强⼤计算能⼒。

在此以⼀个⼩例⼦的形式给⼤家讲述⼀下⼆者混合编程的实现。

⼀、软件的配置说明C#版本:VS2010;MatLab版本:MatLab2011a⼆、制作matLab的C# dll⽂件2.1⾸先写⼀个M⽂件(实现你想要的函数执⾏形式)以⽹上down了⼀个M⽂件(实现基本的绘图功能),内容见下表,function test(h,D)for x=-10:0.1:10,if x>Dy=h;hold on;plot(x,y)elseif x<-Dy=-h;hold on;plot(x,y)elsey=h/(D*x);hold on;plot(x,y)endend2.2 创建制作的dll⽂件的⼯程在MatLab的命令窗⼝中,输⼊deploytool,或者利⽤菜单选项,file-new-deployment project打开创建dll⽂件的⼯程创建窗⼝,如下图所⽰。

在图中,主要分为以下三部分,Name:你想要命名的名字,prj是⼯程的后缀(⼀般不忽略);location:创建⼯程的储存位置;type:针对c#⽽⾔,我们需要选择.net assembly这⼀项;点击Ok选项,⼯程已经创建完毕。

下⼀步就是向⼯程中加⼊你想要的⽅法等元素。

2.3 向所建⼯程中添加对应的元素上述过程中,就相当于在C#中创建了Untitled2的命名空间,需要在此添加对应的类和⽅法。

基于上述的例⼦,下⼀步,我们在窗体菜单中Assembly-点击选择,见下图所⽰。

在上⾯Classes是你⾃⼰对应编写了⼀个类,然后向⾥⾯添加Add files,也就是你之前编写的M⽂件,经过编译之后,就在对应的⼯程⽂件中,形成你所需要的dll⽂件。

下⼀步我们如何在C#中利⽤对应的dll⽂件。

三、如何在C#中利⽤Matlab制作的dll⽂件3.1⾸先,将matlab中对应的刚编写好的untitled的dll⽂件,同时从C:R2011a\toolbox\dotnetbuilder\bin\win64\v2.0中拷贝出MWArrary.dll和Module三个⽂件拷贝到C#编写的⼯程⽂件中去,C#编程⽂件的debug⽂件中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件设计开发本栏目责任编辑:谢媛媛C#与Matlab混合编程的两种模式分析陈红玲1,周立平2(1.吉林大学珠海学院,广东珠海519041;2.广东国华粤电台山电厂,广东台山529228)摘要:简述了C#与Matlab混合编程的实际意义与应用领域,给出了混合编程的两种具体实现方法,最终分析了这两种方法在编程效率、软件复用度方面的优劣。

关键词:组件技术;C#;MATLAB中图法分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-21642-02TheAnalysisaboutTwoKindsModelofC#andMatlabMixProgrammingCHENHong-ling1,ZHOULi-ping2(1.ZhuhaiCollegeofJilinUniversity,Zhuhai519041,China;2.GuangdongGuohuaTaishanElectricFactory,Taishan529228,China)Abstract:AbriefdescriptionaboutthepracticalsignificanceandtheapplicationdomainofC#andMatlabmixprogramminghasbeensummarized,twokindofmodelstorealizethemixprogramminghavebeengiven,theadvantageanddisadvantageofthetwomethodshasbeenanalyzedfinallyintheprogrammingefficiencyandsoftwarereusabilityaspect.Keywords:Componenttechnology;C#;MATLAB1引言MATLAB是当今世界上使用最为广泛的数值计算软件之一,具有强大的矩阵计算能力,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、信号处理等若干个领域的数学计算[1]。

C#是微软.NET战略中核心的开发工具,它综合了VisualBasic的高效率和C++功能的强大性,具有良好的界面设计功能,可以很方便地建立应用程序的可视化界面[2]。

整合C#界面设计能力和MATLAB的科学计算能力,可以解决环境评价、金融计算、图像处理等多个领域的实际问题,具有很好的应用前景。

目前,采用VB、VC、C++Builder等高级语言与MATLAB的混合编程技术已有较多的研究并且存在一定的应用成果,而C#是近几年微软新推出的编程语言,目前对于C#与MATLAB混合编程的研究还很少,本人在实践应用的过程中,总结了以下关于C#与MATLAB混合编程接口技术实现的经验。

2DLL文件模式利用MATLAB的编译工具中的mcc命令可以方便地将m文件转化为动态连接库文件(dll),但由于转化时是采用C或C++编译器,所以产生的dll文件可以由VC++直接调用,却不能被C#调用。

但C#可以调用由VC++编译生成的dll文件,由此想到由VC++作为C#和MATLAB中间的一个桥梁,通过VC++把MATLAB生成的dll文件打包进VC++的dll文件中来,这样C#就可以间接地调用MATLAB生成的dll文件了。

本文所用软件的版本为VC++6.0和MATLAB6.5,其中Matlab安装路径为D:\MATLAB6p5,实现的具体步骤如下:第一步:设置环境变量①在Matlab命令窗口中依次输入:mbuild–setup和mex–setup②选择VC++6.0编译器下的工具→选择→目录中的Includefiles添加D:\MATLAB6P5\EXTERN\INCLUDE路径,在Libraryfiles下添加D:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60路径。

第二步:使用mcc命令,将MATLAB中的m文件编译成dll文件mcc–t-Wlibhg:dlltest-Tlink:libtestlibmmfile.mlib此例中mlib编译命令将test.m文件编译成C代码,函数接口为Jisuan()。

同时生成dlltest.exports、dlltest.h、dlltest.lib、dlltest.c、dlltest.dll、dlltest.mlib、dlltest.expt等文件。

第三步:在VC++中调用刚生成的dll文件,再打包制作成C#可以调用的dll文件①在VC++6.0中将生成后的dlltest.h、dlltest.lib、dlltest.dll三个文件拷贝到名为testMydll的测试工程目录下,并通过Project→AddToProject→Files将文件引入工程。

②在testMydll.cpp中添加如下语句:#include"dlltest.h"voidtestMydll(){dlltestInitialize();mlfJisuan_test();收稿日期:2008-04-02作者简介:陈红玲(1980-),女,湖南郴州人,助教,硕士,研究方向为数据库技术;周立平(1977-),男,湖南郴州人,工程师,硕士,研究方向为嵌入式系统开发。

1642电脑知识与技术软件设计开发本栏目责任编辑:谢媛媛dlltestTerminate();}③在testMydll工程中新建一个名为testMydll.def的文件,在其中添加语句:LIBRARY"testMydll.dll"DESCRIPTION"Implement"EXPORTStestMydll@1④将testMydll工程编译后在其Debug目录下将生成testMydll.dll、testMydll.exp、testMydll.lib等文件,其中testMydll.dll则是在C#中可以直接调用的dll动态链接库文件。

第四步:C#调用VC++编译生成的dll文件将前面两步骤中由Matlab生成的dlltest.h、dlltest.lib、dlltest.dll三个文件和由VC++6.0中生成的testMydll.dll文件拷贝到C#的工程中,接着将bin和obj文件夹中的这四个文件导入工程,在工程的程序中添加语句:[DllImport(“testMydll.dll”,EntryPoint=”testMydll()”)]//调用dll文件声明publicstaticexternvoidtestMydll();//接口函数声明testMydll();//调用函数3COM组件模式利用MATLAB的comtool工具可以方便地将m文件转化为COM组件,生成的COM组件只要在客户机上注册后即可像使用ActivX控件一样方便被调用,不同的编程语言可以对其实例化,通过传参数的方式加以复用。

此方法的具体步骤如下:第一步:在MATLAB中生成COM组件①将Matlab生成的m文件保存名为test.m。

在Matlab命令窗口中输入命令:comtool,打开COMBuilder窗口。

②在该窗口中新建一个名为component的工程,并在该工程中添加文件test.m。

③点击Build→COMobject命令,就可以生成COM组件,其版本号为component1.0,该例中组件包含一个test类,向外提供一个接口函数为jisuan()。

在component工程的文件夹distrib下可以找到一个component_1_0.dll文件,这个文件即是所有遵循COM组件技术规范的高级语言都能够调用的COM组件。

第二步:在.NET中注册COM组件在C#调用该COM组件之前,需先对其进行注册。

在.NET开发平台中点击:Project→AddReference…,在弹出的对话框中选择COM选项卡,选中刚生成的COM组件component1.0,点击OK按钮即完成了组件的注册。

第三步:在C#程序中调用COM组件①将component_1_0.dll文件拷贝到C#的工程文件夹下的Debug文件夹下,在.cs文件中添加命名空间:usingcomponent;②在程序体中添加如下代码,将COM类实例化:component.testClassCsharptest=newtestClass();//实例化COM组件中的test类Csharptest.jisuan();//调用test类中的接口函数jisuan()4两种模式的效率比较由上可见,模式一步骤繁锁,而且还可能由于VC与C#语言细节上面不一致,使程序运行出错。

比如VC语言中字符采用ASCII编码占一个字节,而C#语言中字符采用Unicode编码占两个字节,因此在传递字符参数时若不考虑这个问题,则将导致程序运行失败。

而模式二,步骤简单,调用方便,而且生成的COM组件只要在机器上注册后,便可跨语言甚至跨机器平台得以复用,软件的重用度好,编程效率高。

同时生成的COM组件易于修改、扩展性好,利于系统的升级。

在系统交付使用后,若需对原算法进行修改或更新,只需将修改后的COM组件覆盖原有的同名文件即可;而且系统运行速度也较快,因为应用程序仅仅在需要进行运算的时候才装载所需的组件库,这样减少了系统启动时间和内存占用。

5结束语整合C#优秀的界面设计能力和MATLAB强大的科学计算能力开发多领域的应用软件本身就具有良好的实际研究价值,文中给出的DLL文件和COM组件两种混合编程模式在实践中都切实可行,而后者由于用到了组件技术,故在编程效率、软件重用度等方面都略胜一筹。

参考文献:[1]苏金明.MATLAB7.0实用指南[M].北京:电子工业出版社,2004.[2]毛尧飞..NET数据服务C#高级编程[M].北京:清华大学出版社,2002.1643。

相关文档
最新文档