




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual C#与Matlab混合编程在可视化软件中的应用摘 要:本文重点探讨了visual c#基于dll函数调用matlab绘图程序,进行混合编程的方法。并将该方法在地磁场可视化绘图软件的开发中加以应用。关键词: visual c# matlab dll函数 混合编程 磁场可视化development on its visualization software based on matlab and visual c# mixed programmingli cheng-gang1, zhao jia-bao1, chen zhao-rong2(1.nanjing university school of management and engineering, nanjing 210000; 2.pla95874, nanjing 210012)【abstract】 this article discovered the drawing programming of matlab based on calling dll function with visual c#, then realize the application of visualization software in geomagnetic field with this method.【key words】 visual c# , matlab , dll function, mixed programming, visualization in geomagnetic field 1 背景研究 1.1 matlab的绘图功能matlab是人们常用的科学及工程计算软件,具有强大的数据可视化功能,包括二维和三维的可视化、图象处理、动画和表达式作图1。 1.2 visual c#c#是微软开发的一种面向对象的编程语言,是微软.net开发环境的重要组成部分。而microsoft visual c# 2010是微软开发的c#编程集成开发环境,它是为生成在 .net framework 上运行的多种应用程序而设计的。c# 简单、功能强大、类型安全,可实现应用程序的快速开发。 1.3 混合编程混合编程是指使用两种或两种以上的程序设计语言来开发应用程序的过程。目前, 有很多深受欢迎的计算机上程序设计语言,它们有各自的优势和不足,混合编程可以扬长避短。广受好评的visual c#和matlab,二者混合编程必然有较好的应用前景。 2 基于dll的visual c# 调用matlab 2.1 c#中调用动态链接库dll动态链接库是一个独立的文件,不可直接执行,也不能接收消息,其中包含能被程序或其它dll调用来完成一定操作的函数(方法)。这些函数(方法)不是执行程序本身的一部分,而是根据进程的需要即时载入。dll只有在应用程序需要时才被系统加载到进程的虚拟空间中,成为调用进程的一部分,此时该dll仅可被该进程的线程访问,其句柄可被调用进程所使用,而调用进程的句柄也可被该dll所使用。在内存中,一个dll仅有一个实例,且其编译与具体的编程语言和编译器都没有关系,因此可以通过dll来实现混合语言编程。dll函数中的代码所创建的任何对象(包括变量)都归调用其线程或进程所有。使用 dll 时有如下好处:1)可减少在磁盘和物理内存中加载的代码的重复量,使用较少的系统资源。2)有助于促进模块式程序的开发,使得程序开发更加便捷。3)简化部署和安装的过程。2.1.1 调用dll中的非托管函数一般方法首先,在c#语言源程序中声明外部方法,其基本形式是:dllimport(“dll文件”) 修饰符 extern 返回变量类型 方法名称 (参数列表)其中:dll文件:包含定义外部方法的库文件。修饰符: 访问修饰符,除abstract以外在声明方法时可使用的修饰符。返回变量类型:在dll文件中需调用方法的返回变量类型。方法名称:在dll文件中需调用方法的名称。参数列表:在dll文件中需调用方法的列表。需要注意的是,要在程序声明中使用system.runtime. interopservices命名空间。dllimport只能放置在方法声明上。dll文件必须位于程序当前目录或系统定义的查询路径中。返回变量类型、方法名称、参数列表必须与dll文件中的定义一致。可通过entrypoint属性设置,更改函数名等。2.1.2 动态装载、调用dll中的非托管函数对于全局函数,如果dll中的非托管函数有一个静态变量s,每次调用这个函数的时候,静态变量s就自动加1。当需要重新计数时,就会出现和预想不同的结果。首先,创建dll可用dllimport调用dll中的函数(方法), 然后实现c#动态调用dll中的函数(方法)。c#中使用dllimport不能像动态load/unload assembly那样,可借助api函数,其中与动态库调用有关的函数包括下面几种:1)loadlibrary(或mfc 的afxloadlibrary),装载动态库。2)getprocaddress,获取要引入的函数,将符号名或标识号转换为dll内部地址。3)freelibrary(或mfc的afxfreelibrary),释放动态链接库。可用intptr hmodule=loadlibrary(“count.dll”);来获得dll的句柄,用intptr farproc=getprocaddress(hmodu le,”_count4”);来获得函数的入口地址。在c#中没有函数指针,可通过结合使用system. reflection.emit及system.reflection.assembly里的类和方法达到相同的目的。 2.2 如何用vc#来调用matlab函数。2.2.1 编译器的设置在matlab的command window下运行”mbuild setup” 和 “deploytool”。 通常,运行”mbuild setup”时,让系统自动搜索编译器就可以了。deploytool运行后,取一个工程名(例如testcshapmatlab),选择.net component,会生成一个新工程。把sumab.m 加入到新工程中,然后进行编译,工程目录下的distrib目录里就会有testcshapmatlab .dll,可以供vc#使用。也可以直接编译 matlab里面自带的库函数。打开visual studio 2010, 新建一个vc#工程,例如testcshapmatlab项目。建好后,在solution explorer里,鼠标右键单击references-add references-browse, 加入生成的testcshapmatlabdistribtestcshapmatlab.dll;重复操作,加入matlab目录下的另一个dll文件,toolbox dotnetbuilderbinwin32v2.0mwarray.dll。环境设置好之后,就可以开始编程。在编程的开始可打开vc#工程里的主文件,例如unittestcshapmatlab1.cs。在文件的开始部分加入using .arrays;需要画图,则加上using .utility;在数据的输入输出的问题上,如果遇到大的数据,输出可以使用excel或sql,数据的输入,可在matlab中写输入数据的函数,这样可进一步提高效率。 3 地磁场数据可视化软件开发实例 3.1 c#调用matlab的绘图函数编译环境:microsoft visual studio 2010;matlab r2010b第一步,如前文2.2.1所说进行matlab编译器的设置。第二步,在matlab的command window中输入:“ deploytool”,matlab产生deployment tool配置窗口。新建工程- matlab builder ne 选项卡-. net component并添加工程名testcshapmatlab-点击add file按钮将需要编译的matlab函数添加进当前工程-点击build。等待编译成功,生成的文件在工程文件夹里面,matlab的操作完成。第三步,打开visual studio 2010新建c#工程名为testcshapmatlabofmatlab_consolt,添加引用draws.dll、mwarray.dll和mwutility.dll。并加入命名空间:“using .arrays; using mathworks. .utility;”下面是主要代码: private void drawingimage()string datas = datacollection.text;/读取参数draws.drawclass draw_1 = new draw.drawclass(); draw_1.draw(datas); /调用绘图函数private void button2_click(object sender, eventargs e) try if (picturebox1.image != null) picturebox1.image.dispose(); this.drawingimage();/图像显示picturebox1.image = system.drawing.image.fromfile(”d: draws.bmp”);catch (exception ex)messagebox.show(ex.message,”异常”); 3.2 运行结果编译运行即可看到输出,点击导入数据,将事先采集的数据文件“数据.txt”读取,如图1。图1 数据导入与读取数据导入成功以后,点击绘图,得到如图2所示结果。 4 小结本文探讨visual c#与matlab混合编程具体方法和实例开发,并解决了参数传递问题。利用matlab强大的数学计算能力和绘图功能,visual c#调用matlab函数,能够更加便捷的开发工程应用软件。参考文献1 赵启蒙,高美娟.通过面向对象编程调用matlab 绘图的实现j.大庆石油学院学报,2004, 28(1):80-82. zhao qimeng, gao meijuan. matlab mapping by object oriented programmingj. daqing petroleum institute ,2004, 28( 1) : 80- 82. (in chinese)2 肖永韧,解习农
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酷爽安全平台题库及答案解析
- 安全培训师培养程序内容课件
- 2025年国家开放大学《商务谈判与沟通》期末考试备考试题及答案解析
- 2025年国家开放大学《品牌孵化与创新》期末考试备考试题及答案解析
- 2025年国家开放大学《数据结构与算法》期末考试备考试题及答案解析
- 2025年国家开放大学(电大)《环境经济学》期末考试备考试题及答案解析
- 2025年国家开放大学《儿童发展心理学》期末考试备考试题及答案解析
- 小学生古诗词朗诵教学活动设计
- 2025年国家开放大学《舞蹈学》期末考试备考试题及答案解析
- 2025年国家开放大学《市场趋势分析》期末考试备考试题及答案解析
- 2025-2030铌行业市场现状供需分析及投资评估规划分析研究报告
- 卵巢透明细胞癌临床诊治指南(2024年版)解读课件
- 商业建筑设计手册
- 物控管理制度
- 牛津深圳版小学英语三年级上册单元测试卷(含听力材料及答案)全册
- 专题04议论开头结尾及衔接的技巧(课件)中考议论文写作指导
- 静脉高营养治疗
- 肉毒素知识培训课件
- 最终版附件1:“跨学科主题学习”教学设计(2025年版)
- 中国血脂管理指南(基层版+2024年)解读
- 青海省历年中考语文现代文阅读真题33篇(截至2024年)
评论
0/150
提交评论