MATLAB与C#联合编程的实现_第1页
MATLAB与C#联合编程的实现_第2页
MATLAB与C#联合编程的实现_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.1.1 MATLAB与C#联合编程的实现1. MATLAB与C#联合编程的方法MATLAB与C#联合编程常见的实现方式有两种,包括COM(Component Object Model)组件和C共享库即DLL动态链接库。结合本程序的实际需要与两种方法的优劣,此处选择采用DLL动态链接库的方式。DLL动态链接库的优点在于其可靠性高以及操作简单,能够快速实现,其缺点在于不能完全脱离MATLAB独立运行,需要MATLAB相关程序的支持,并且在初次链接运行时耗时较长。2. 运用DLL动态链接库的具体操作方法(1) 在MATLAB中的操作首先根据要让MATLAB实现的具体功能编写好相应的M函数。然后在

2、MATLAB的Start菜单项中启动Deployment Project窗口,也可以在MATLAB的Command Window窗体中直接输入deploytool命令直接启动该窗口,对于不同版本的MATLAB其启动方式有所差别,此处以MATLAB R2009b为例,如图2.1所示。在Deployment Project窗口中命名工程,此名即是DLL动态链接库的名字。然后选择工程所存放的路径,并在Target栏中选择.NET Assembly项。单击确定后便可进入Deployment Tool窗口,该窗口用做编译M函数的最后设置,也是关键设置,如图2.2所示。单击Add class,向动态链接库

3、中添加一个类,此类与C#中的类近似,DLL动态链接库中可以添加多个类。在命名类时不能与DLL的名字相同,且尽量避免与M函数名相同,否则将无法编译成功。添加完一个类之后,单击类下面的Add file,向类中添加已经编写好的M函数文件,同样可以向类中添加多个函数文件。完成上述设置后单击Project菜单项中的Build开始编译,编译好时大约一分钟。编译完成后可在工程所存放的路径下找到以DLL文件名命名的文件夹,在下级distrib文件夹中便能找到编译生成的DLL文件,此文件可供C#直接引用。此处输入工程名。图1.1 Deployment Project窗口(2) 在C#中的操作为了实现C#成功引用

4、编译好的DLL文件以及实现与M函数之间的参数传递,需要将编译好的DLL文件及MWArray.dll和ManagedCPPAPI.netmodule三个文件拷贝到C#当前项目的Debug文件夹中。MWArray.dll和ManagedCPPAPI.netmodule文件存放于“盘符:Program FilesMATLABR2009btoolboxdotnetbuilderbinwin32v2.0“路径下,其主要用于C#与MATLAB之间的数据格式转换。完成拷贝之后就可以在项目中添加上述文件,即在C#的“解决资源方案管理器”中右击“引用”项,选择添加引用,在Debug文件夹中找到刚拷贝的DLL文件

5、及MWArray.dll,将这两个文件添加到引用中。此处添加类名与函数文件。单击此处开始编译。图1.2 Deployment Tool窗口C#调用M函数时还需要在当前C#的CS文件前添加引用,即using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility;以及using “编译的DLL文件名”。此后的操作与C#的编程方式相同,此处不再赘述,但仍需说明的是C#与M函数之间的数据传递方法。除字符串变量外,C#中的其它变量均不能直接传递给M函数使用。C#在给M函数传递参数时,需将变量转换成MWArray类型或MWArray

6、类的子类型。对于数字一般转换成MWNumericArray类型,字符转换成MWCharArray类型。其实现方式是用上述类型定义一个变量,然后将要传递的数据赋给该变量,再将该变量用作M函数的参数即可。需要注意的是,MWArray类型变量本身就是矩阵,与MATLAB中的数据类型相同,其可以直接接受C#中数组变量的赋值,即可将一个数组整体赋值给MWArray类型变量。但是对于C#中的List泛型集合变量,其不能直接赋值给MWArray类型的变量,仍需转换为数组型。在取用M函数的返回值时,其过程正好与上述过程相反。M函数返回的值是MWArray类型,它可以是单值,也可以是矩阵,因此在取用时应当首先知

7、道M函数返回值类型。对于返回的矩阵类型变量,取用其内部的值时所采用的索引值与C#中的数组变量不同。C#中数组变量的起始行列索引为0,而M函数返回的矩阵变量起始索引值则为1。对取出的数据需要采用“(double)”方法将其强制转换后才能赋给C#中的其double型变量。至此,采用 DLL动态链接库实现C#与MATLAB联合编程的方法及一些注意事项已介绍完成。此处所讲述的也只是在本程序编写中所使用到的方法或遇到的问题,关于C#与MATLAB联合编程的其它方法和程序编写过程中所遇到的其它问题有待进一步发掘、解决。1.1.2 MATLAB绘图窗体嵌入C#的WinForm界面的实现实现MATLAB绘图窗

8、体嵌入C#的WinForm界面是通过程序自身调用Windows系统中的API(Application Programming Interface)函数。这些函数包含在Windows系统目录下的user32.dll动态链接库中。在C#中编写本程序时,已将程序所运用到相关的API函数包含在了新建的DotNetWin32类中,以便于程序中的其它函数掉用。在C#的WinForm界面中嵌入窗体前,程序先调用用于专门建立MATLAB的Figure窗体的函数。该函数在MATLAB中编写好,并对窗体的界面做了优化处理,保留了常用的Figure窗体自带的工具选项,其源程序代码已在附录中列出。采用先绘制Figure窗体的方式是因为后面的M函数在处理数据并绘图时耗时较长,为了界面的美观,所以先将窗体嵌入了WinForm界面。实现窗体嵌入时,先调用DotNetWin32类中的FindWindow函数获取Figure窗体句柄,然后再调用DotNetWin32类中的SetParent函数,通过窗

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论