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

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:qq602602
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:简述了C#与Matlab混合编程的实际意义与应用领域,给出了混合编程的两种具体实现方法,最终分析了这两种方法在编程效率、软件复用度方面的优劣。
  关键词:组件技术;C#;MATLAB
  中图法分类号:TP311文献标识码:A文章编号:
  
  The Analysis about Two Kinds Model of C# and Matlab Mix Programming
  CHEN Hong-ling1,ZHOU Li-ping2
  (1. Zhuhai college of Jilin University,Zhuhai 519041,China; 2.Guangdong Guohua Taishan electric factory,Taishan529228,China)
  Abstract: A brief description about the practical significance and the application domain of C# and Matlab mix programming has been summarized, two kind of models to realize the mix programming have been given, the advantage and disadvantage of the two methods has been analyzed finally in the programming efficiency and software reusability aspect.
  Keywords: Component technology;C#;MATLAB
  
  1 引言
  
  MATLAB是当今世界上使用最为广泛的数值计算软件之一,具有强大的矩阵计算能力,可以实现数值分析、优化、统计、偏微分方程数值解、自动控制、信号处理等若干个领域的数学计算[1]。C#是微软.NET战略中核心的开发工具,它综合了Visual Basic的高效率和C 功能的强大性,具有良好的界面设计功能,可以很方便地建立应用程序的可视化界面[2]。整合C#界面设计能力和MATLAB的科学计算能力,可以解决环境评价、金融计算、图像处理等多个领域的实际问题,具有很好的应用前景。
  目前,采用VB、VC、C Builder等高级语言与MATLAB的混合编程技术已有较多的研究并且存在一定的应用成果,而C#是近几年微软新推出的编程语言,目前对于C#与MATLAB混合编程的研究还很少,本人在实践应用的过程中,总结了以下关于C#与MATLAB混合编程接口技术实现的经验。
  
  2 DLL文件模式
  
  利用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编译器下的工具 → 选择 → 目录中的Include files添加D:\MATLAB6P5\EXTERN\INCLUDE路径,在Library files下添加D:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60路径。
  第二步:使用mcc命令,将MATLAB中的m文件编译成dll文件
  mcc –t -W libhg:dlltest -T link:lib test libmmfile.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 → Add To Project → Files将文件引入工程。
  ② 在testMydll.cpp中添加如下语句:
  #include "dlltest.h"
  void testMydll( )
  {dlltestInitialize();
   mlfJisuan_test();
   dlltestTerminate();}
  ③ 在testMydll工程中新建一个名为testMydll.def的文件,在其中添加语句:
  LIBRARY "testMydll.dll"
  DESCRIPTION "Implement"
  EXPORTS
  testMydll @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文件声明
  public static extern void testMydll(); //接口函数声明
  testMydll(); //调用函数
  
  3 COM组件模式
  
  利用MATLAB的comtool工具可以方便地将m文件转化为COM组件,生成的COM组件只要在客户机上注册后即可像使用ActivX控件一样方便被调用,不同的编程语言可以对其实例化,通过传参数的方式加以复用。此方法的具体步骤如下:
  第一步:在MATLAB中生成COM组件
  ①将Matlab生成的m文件保存名为test.m。在Matlab命令窗口中输入命令:comtool,打开COM Builder窗口。
  ②在该窗口中新建一个名为component的工程,并在该工程中添加文件test.m。
  ③点击Build → COM object命令,就可以生成COM组件,其版本号为component 1.0,该例中组件包含一个test类,向外提供一个接口函数为jisuan( )。在component工程的文件夹distrib下可以找到一个component_1_0.dll文件,这个文件即是所有遵循COM组件技术规范的高级语言都能够调用的COM组件。
  第二步:在.NET中注册COM组件
  在C#调用该COM组件之前,需先对其进行注册。在.NET开发平台中点击:Project → Add Reference…,在弹出的对话框中选择COM选项卡,选中刚生成的COM组件component 1.0,点击OK按钮即完成了组件的注册。
  第三步:在C#程序中调用COM组件
  ①将component_1_0.dll文件拷贝到C#的工程文件夹下的Debug文件夹下,在.cs文件中添加命名空间:using component;
  ②在程序体中添加如下代码,将COM类实例化:
  component.testClass Csharptest = new testClass();//实例化COM组件中的test类
  Csharptest.jisuan( );//调用test类中的接口函数jisuan( )
  
  4 两种模式的效率比较
  
  由上可见,模式一步骤繁锁,而且还可能由于VC与C#语言细节上面不一致,使程序运行出错。比如VC语言中字符采用ASCII编码占一个字节,而C#语言中字符采用Unicode编码占两个字节,因此在传递字符参数时若不考虑这个问题,则将导致程序运行失败。
  而模式二,步骤简单,调用方便,而且生成的COM组件只要在机器上注册后,便可跨语言甚至跨机器平台得以复用,软件的重用度好,编程效率高。同时生成的COM组件易于修改、扩展性好,利于系统的升级。在系统交付使用后,若需对原算法进行修改或更新,只需将修改后的COM组件覆盖原有的同名文件即可;而且系统运行速度也较快,因为应用程序仅仅在需要进行运算的时候才装载所需的组件库,这样减少了系统启动时间和内存占用。
  
  5 结束语
  
  整合C#优秀的界面设计能力和MATLAB强大的科学计算能力开发多领域的应用软件本身就具有良好的实际研究价值,文中给出的DLL文件和COM组件两种混合编程模式在实践中都切实可行,而后者由于用到了组件技术,故在编程效率、软件重用度等方面都略胜一筹。
  
  参考文献:
  [1] 苏金明.MATLAB7.0实用指南(第1版)[M].北京:电子工业出版社,2004,11.
  [2] 毛尧飞,译..NET数据服务C#高级编程(第1版)[M].北京:清华大学出版社,2002,6.
  
  投稿日期:
  作者简介:陈红玲(1980-),女,汉族, 湖南郴州人,助教,硕士,研究方向为数据库技术。周立平(1977-),男,汉族,湖南郴州人,工程师,硕士,研究方向为嵌入式系统开发。
其他文献
摘要:江苏省农业种质资源信息系统及基因库建设项目是江苏省农业种质资源保护与利用平台中的一个子平台。平台由水禽种质资源基因库、水禽研究开放实验室、水禽信息中心、水禽推广服务中心等构成。项目中的重要内容之一是构建水禽信息化中心,根据《江苏省农业种质资源保护与利用平台建设总体方案》的要求,要研究和完善水禽种质资源的描述规范,标准化整理,建立江苏省水禽种质资源数据库,通过e-平台和江苏省科技信息共享网络系
摘要:本文介绍了济南市气象网站的建设及其主要结构和网页内容. 济南气象网站发布的信息内容主要为系列气象预报和其他气象信息,实现了网页气象信息的自动更新,介绍了互联网技术在气象服务中的应用。  关键词:气象网站;气象信息;自动更新;后台管理  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)17-20ppp-0c    Internet Technology in Met
摘要:IPv6技术是下一代互联网的技术核心,对IPv6网络入侵检测系统的研究与下一代网络的安全技术紧密相关。在分析网络安全系统的基本原理和IPv6网络的主要特点之后,提出了一种基于IPv6网络入侵检测系统的框架,同时采用了改进的KMP算法和蜜罐技术。  关键词:IPv6;网络入侵检测;模式匹配;蜜罐技术  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)18-2pppp
摘要:本文描述了一种在TCP/IP网络中进行故障节点诊断的程序实现,该方法基于VxWorks操作系统的网络测试仪环境,但此程序算法的实现,并不依赖于底层的操作系统及硬件环境,经过少量修改可以在任何提供TCP/IP协议栈的操作系统中实现,比如Linux,Windows等。  关键词:ICMP;TCP;UDP;路由追踪  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)18
摘要:采用自定义主体Principal和身份Identity实现基于窗体的安全验证,构建了一个灵活方便的安全权限管理系统,综合使用了数据库技术、面向对象设计技术、操作系统权限管理、NET框架中基于代码访问安全性和基于角色访问安全性等多方面技术。该方案可以用于多数WEB系统中,作为通用的安全权限管理模块。  关键词:身份验证;自定义主体;自定义身份  中图法分类号:TP311文献标识码:A文章编号:
摘要:介绍了Java平台安全、J2EE安全体系结构。以一个登录请求为例,重点研究了J2EE架构在医师协会管理系统中的应用,以及使用J2EE安全体系结构构建医师协会管理系统。  关键词:J2EE;安全体系结构;医师协会管理系统  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c    Security Research on Medical Doct
摘要:《Visual Basic .Net》是软件技术专业的核心职业技能课之一,其先修课程有计算机基础、Java编程基础、数据库应用技术等,其后续课程有.NET项目开发实训、WEB应用开发技术等。本文参考国际软件专业教育或培训的方法,探讨在工学结合人才培养模式下、基于工作岗位的该课程的改革与整合。  关键词:VB.Net;工作岗位;软件;职业教育;课程改革与整合  中图分类号:G646 文献标识码
摘要:本文探讨了Honeynet(陷阱网络)的概念、实现、特点。阐述了从主动防御的角度解决网络安全的问题,从而将入侵者的行为引入一个可以控制的范围,了解其使用的方法和技术,追踪其来源,记录其所有的操作。  关键词:网络安全;陷阱网络;主动防御;入侵检测  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2008)18-20000-00    The analysis and i
摘要:基于Hypercube模型的P2P资源搜索策略和路由策略,是以单纯广播方式进行的,搜索和路由效率比较低.因此提出了“一跳复制”技术以及改进算法RA1,提高了搜索和路由的效率,同时增强了P2P网络的效率和健壮性。  关键词:一跳复制; RA1算法;路由表  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c    Improvement of P
摘要:数据预处理在Web日志挖掘过程中起着至关重要的作用。本文详细分析了数据预处理的过程,并对用户识别提出了改进策略,最后实现了一个Web日志挖掘预处理模型(WLMPM)。  关键词:Web日志挖掘;数据预处理;用户识别;会话识别  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)18-2pppp-0c    Research on Data Preprocessing