matlab dll vb 混合 vc.doc_第1页
matlab dll vb 混合 vc.doc_第2页
matlab dll vb 混合 vc.doc_第3页
matlab dll vb 混合 vc.doc_第4页
matlab dll vb 混合 vc.doc_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

前言:本人用的matlab2007b,安装了c+6.0,请先将matlab的编译器选择为c+6.0 用命令mbuild setup,程序功能描述:,我想大家一看这个就明白了,其中计算的公式用matlab部分完成,这个是算法部分:现在想要做的就是通过vb里面的三个文本框输入参数 a b c ,并且将计算结果x,y返回到文本框中.1.matlab 生成dll文件在command window中输入deploytool,打开 deployment tool 工具点击, 新建一个工程,工程名字根据自己定义哈,比如我这个工程名:jiajia(注意:一定要选择matlab builder for .net-generic component,就是上图黑色选中的选项),系统默认的类名字为:jiajiaclass(就是在工程名后加class),加入你想要编译的m文件,(要加入到*class下面哦,如果还有其他非m文件,放到other files里面)按下就可以编译了.编译完成后会,就会在当前目录下生成这两个文件夹打开distrib 文件夹,编写的注册文件,新建一个txt文档,内容如下:单击文件-另存为,出现保存类型选所有文件,文件名为zhuce.bat(注意:后缀名一定要是bat),单击保存,出现文件,双击该文件,出现注意:该dll文件如果是本机生成的就不需要注册,非本机生成的必须注册,由于本人用的是matlab2007b,所以要安装相关的运行环境文件MCR Installer,以我的机子为例,该问价在:双击MCRInstaller.exe 安装该文件.2.vb6.0部分:单击工程-引用 找到刚生成的jiajia 1.0 type library文件 建立vb界面如下:程序就不说了哈,自己打开慢慢看,里面关键部分都注释了的.咱也发篇原创,引用的朋友请标注出处。VC与Matlab混合编程的方法有很多,引擎功能虽强但太慢,而COM又比较麻烦(VB、DELPHI/C+Builder的使用简单些)。今天介绍一种VC与Matlab混合编程的方法。通过将m函数编译成标准的dll动态链接库,实现在VC中对Matlab模块的方便调用。本文的环境为VC+ 6.0、Matlab 6.5。不同的环境在实现起来可能略有不同。1 设置Matlab编译器在Matlab命令窗口中输入mbuild setup,系统提示“是否对安装的编译器进行配置?”,输入y,显示系统中安装的编译器。选择Microsoft Visual C/C+ version 6.0 in D:Program FilesMicrosoft Visual Studio的编译器,并确定。(注:此步过程只需进行一次。)2 编写m函数作为示例,这里编写了一个简单的m函数:function b = myFunc(a)b = a.*a;保存文件名为myFunc.m。3 编译m函数为DLL在Matlab命令窗口中输入mcc -B csharedlib:myDLL myFunc.m。其中,myDLL是生成的dll的文件名,这个名子可以更改。编译完成后,将myFunc.m所在的文件夹下生成9个文件。其中,myDLL.dll、myDLL.lib和myDLL.h三个文件是我们下面所要使用的。4 建立测试工程启动VC。选择文件菜单下的新建命令,创建一个Win32 Console Application。在工程类型对话框中选择A simple application。点击完成。5 设置VC+6.0工作环境首先设置include文件搜索路径。选择VC的Tools菜单下的Options命令,打开工程设置对话框。点击“目录”选项卡,把D:MATLAB6p5p1externinclude路径添加到列表框中。点击确定。然后添加Lib文件到工程中。选择工程菜单下添加到工程命令,选择Files选项,将D:MATLAB6p5p1externlibwin32microsoftmsvc60文件夹下的libmatlbmx.lib文件和上边生成的myDLL.lib文件添加到工程中。最后,将myDLL.h、myDLL.dll文件拷贝到工程文件夹下。6 编写测试代码首先添加#include “myDLL.h”。myDLL.h输出了几个函数,工程中用到的函数有三个,它们分别是:myDLLInitialize()、myDLLTerminate()和mlfMyfunc()。这三个函数的作用分别是初始化DLL库、结束DLL库和m函数myFunc对应的C函数,这个C函数也是我们所需要的。和m函数相比,函数名有了一些变化。主要的变化是加上了mlf的前缀。这个前缀应该是MatLab Function的简写。然后在main()函数内添加代码。总的main()函数代码清单如下所示:C/C+ code int main(int argc, char* argv) myDLLInitialize(); /库初始化 double _x5 = 1, 2, 3, 4, 5; /输入数组 double _y5; /输出数组 mxArray* x = mxCreateDoubleMatrix(1, 5, mxREAL); /创建1*5矩阵 memcpy(mxGetPr(x), (void*)_x, sizeof(_x); /拷贝输入数据 mxArray* y = mxCreateDoubleMatrix(1, 5, mxREAL); /创建1*5矩阵 y = mlfMyfunc(x); /调用m函数 memcpy(_y, mxGetPr(y), sizeof(_y); /拷贝输出数据 myDLLTerminate(); /结束DLL库 printf(%fn, _y0); /打印结果 printf(%fn, _y1); printf(%fn, _y2); printf(%fn, _y3); printf(%fn, _y4); return 0;这些代码在理解上应该不是很困难。需要说明的有一点:mxArray可认为是C中与Matlab中相对应的矩阵类型。在C中,变量需要先定义,后使用。另外,在定义mxArray类型的变量后,需要对其进行初始化,指定它的类型和尺寸。mxGetPr()函数用于获取mxArray类型数据的实部首地址,因为内存是连续分配的,所以可以使用内存拷贝函数将一个数组的数据拷贝给它。7 发布如果仅是在本机上使用DLL,那么以上六步即可满足要求。如果要在没有安装Matlab的计算机中使用此DLL,还需要随DLL拷贝一些动态链接库等文件。双击D:MATLAB6p5p1externlibwin32文件夹下的mglinstaller.exe文件,即可生成所需的文件。mglinstaller.exe会在D:MATLAB6p5p

温馨提示

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

评论

0/150

提交评论