Matlab的M文件生成动态链接库DLL_第1页
Matlab的M文件生成动态链接库DLL_第2页
Matlab的M文件生成动态链接库DLL_第3页
Matlab的M文件生成动态链接库DLL_第4页
Matlab的M文件生成动态链接库DLL_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、1 、 mcc4.0 编译环境设置在桌面上右键单击“我的电脑”图标出现以下菜单单击“属性”菜单项,出现“系统特性”对话框,单击“高级”选项卡,如下图所示在上图中,单击“环境变量”按钮,出现“环境变量”对话框, 添加系统变量 matlab 值为 C:MATLAB7 即 matlab7.0 的安装路径,如下图所示在环境变量 path 中加入 C:MATLAB7binwin32 ,如下图所示按“确定”完成设置后, 重启计算机或注销当前用户 ,即可应用新设置。2 、 Matlab7.0 编译器设置(1) mex 命令设置 (a) 运行 Matlab ,在 Matlab 的命令窗口 (Command W

2、indow) 键入“ mex -setup ”命令后,按回车键,安装 Matlab 编译器;(b) 命令窗口出现如下提示:Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers y/n?此时键入 ”y” ,按回车;(c) 命令窗口出现如下提示:Please choose your compiler for building external interface (MEX) files:Would you lik

3、e mex to locate installed compilers y/n? ySelect a compiler:1 Digital Visual Fortran version 6.0 in C:Program FilesMicrosoft Visual Studio2 Lcc C version 2.4 in C:MATLAB6P5syslcc3 Microsoft Visual C/C+ version 6.0 in C:Program FilesMicrosoft Visual Studio0 None此时键入 ” 3” ,按回车 ;选择 Microsoft Visual C+6

4、.0 的编译器(d) 命令窗口出现如下提示:Please verify your choices:Compiler: Microsoft Visual C/C+ 6.0Location: C:Program FilesMicrosoft Visual StudioAre these correct?(y/n):此时键入 ”y” ,按回车 ;确认选择 Microsoft Visual C+6.0 的编译器(2) mbuild 命令设置 (a) 运行 Matlab ,在 Matlab 的命令窗口 (Command Window) 键入“ mbuild -setup ”命令后,按回车键,安装 Mat

5、lab 编译器;(b) 命令窗口出现如下提示:Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers y/n?此时键入 ”y” ,按回车 ;(c) 命令窗口出现如下提示:1 Lcc C version 2.4 in C:MATLAB6P5syslcc2 Microsoft Visual C/C+ version 6.0 in C:Program FilesMicrosoft Visual Studio0

6、None此时键入 ” 2” ,按回车 ;选择 Microsoft Visual C+6.0 的编译器(d) 命令窗口出现如下提示:Please verify your choices:Compiler: Microsoft Visual C/C+ 6.0Location: C:Program FilesMicrosoft Visual StudioAre these correct?(y/n):此时键入 ”y” ,按回车 ,确认选择 Microsoft Visual C+6.0 的编译器,编译器设置完成。3 、编写 Matlab 函数函数文件 sum_prod.m ,内容如下:function

7、 sum,prod = sum_prod(p1,p2)sum = p1+p2; % p1 与 p2 的和prod = p1.*p2; % p1 与 p2 的点乘该函数完成的是矩阵的求和与点乘的功能,下面将介绍把该代码转换成 VC+ 环境可用的代码的方法。4 、将 Matlab 函数转成 DLL 函数在 Matlab7.0 的 Command Window 下输入命令 :命令 1 : mcc -W lib:libsum_prod -T link:lib sum_prod.m或命令 2 : mcc -W cpplib:libsum_prod -T link:lib sum_prod.m生成动态链接

8、库 DLL ,编译完成后, Matlab 生成一些文件, 其中libsum_prod.ctflibsum_prod.dlllibsum_prod.hlibsum_prod.lib这些文件是我们后面需要用到的。特别注意 : 命令 1 生成的 DLL 函数接口的数据类型是 mxArray ,命令 2 生成的 DLL 函数接口的数据类型是 mwArray 。5 、 VC+6.0 工程的创建与设置(1) 建立一个名为 Test 的 C+ 控制台工程,在工程中添加一个名为 Test.cpp 文件(2) 对 VC 6.0 ,进行以下设置单击菜单 Tools ,出现如下菜单单击 Options 菜单项,出现

9、 Options 对话框,选择 Directories 标签,在 include files 里面加入:C:MATLAB7EXTERNINCLUDE如下图所示在 Library files 里面加入:C:MATLAB7EXTERNLIBWIN32MICROSOFTMSVC60如下图所示(3) 对该工程,进行以下设置单击菜单 Project ,出现如下菜单单击 Setting 菜单项,出现 Project Setting 对话框,选择 Link 标签,在 Object/library modules: 下面的文本框内容的后面加入 mclmcrrt.lib libsum_prod.lib ,如下图

10、所示6 、代码编辑及 DLL 调用(1) 将前面生成的四个文件:libsum_prod.ctflibsum_prod.dlllibsum_prod.hlibsum_prod.lib复制到 VC 工程所在目录。(2) 在 VC 6.0 环境中, 单击菜单 Project , 选择 Add to Project 菜单项,再单击 Files 子菜单项,出现如下图对话框,将 libsum_prod.h 加入到当前工程中。(3) 当用命令 1 生成的 DLL 函数时 ,在工程文件 Test.cpp 中添加以下代码:#include "iostream.h" / 输入输出头文件#inc

11、lude "mclmcr.h" / mxArray 类型声明#include "libsum_prod.h" / DLL 头文件void display(const mxArray* in, const char* name);int main()/ 初始化程序if( ! mclInitializeApplication(NULL,0) )fprintf(stderr, "Could not initialize the application.n");exit(1);/ 初始化库if (! libsum_prodInitialize

12、() )fprintf(stderr,"Could not initialize the library.n");exit(1);/ 声明 DLL 函数输入输出 mxArray 对象mxArray *X,*Y;mxArray *SUM=NULL,*PROD=NULL;/ 给输入 mxArray 对象分配内存X = mxCreateDoubleMatrix(2,3,mxREAL);Y = mxCreateDoubleMatrix(2,3,mxREAL);double x = 1,2,3,4,5,6;double y = 7,8,9,10,11,12;/ 给输入 mxArray

13、 对象赋值memcpy(mxGetPr(X),x,6*sizeof(double);memcpy(mxGetPr(Y),y,6*sizeof(double);/ 调用 DLL 函数,注意输入与输出的接口是不同的mlfSum_prod(2,&SUM,&PROD,X,Y) ;/ 显示 mxArray 对象display(SUM,"SUM");display(PROD,"PROD");/ 释放输入输出 mxArray 对象所占用的内存/ 注意输出对象的内存是在调用 DLL 函数过程中分配的mxDestroyArray(X);mxDestroyA

14、rray(Y);mxDestroyArray(SUM);mxDestroyArray(PROD);/ 关闭库和程序libsum_prodTerminate() ;mclTerminateApplication() ;return 0;/ 显示矩阵函数void display(const mxArray* in, const char* name)int i,j,r,c;double *data;data = mxGetPr(in);r = mxGetM(in);c = mxGetN(in);printf("%s = n",name);for(i=0;i<r;i+)pr

15、intf("t");for(j=0;j<c;j+)printf("% 4.2f t",dataj*r+i);printf("n");printf("n");该 C+ 程序运算结果如下图所示(4) 当用命令 2 生成的 DLL 函数时 ,在工程文件 Test.cpp 中添加以下代码:#include "iostream.h" / 输入输出头文件#include "mclmcr.h" / mwArray 类型声明#include "libsum_prod.h&qu

16、ot; / DLL 头文件void display(const double* data, const int r, const int c, const char* name);int main()/ 初始化程序if( ! mclInitializeApplication(NULL,0) )fprintf(stderr, "Could not initialize the application.n");exit(1);/ 初始化库if (! libsum_prodInitialize() )fprintf(stderr,"Could not initializ

17、e the library.n");exit(1);/ 声明 DLL 函数输入输出 mwArray 对象mwArray X(2,3,mxDOUBLE_CLASS);mwArray Y(2,3,mxDOUBLE_CLASS);mwArray SUM,PROD;double x = 1,2,3,4,5,6;double y = 7,8,9,10,11,12;double *sum,*prod;sum = new double6;prod = new double6;/ 给输入 mwArray 对象赋值X.SetData(x,6);Y.SetData(y,6);/ 调用 DLL 函数sum

18、_prod(2,SUM,PROD,X,Y) ;/ 取出输出数据SUM.GetData(sum,6);PROD.GetData(prod,6);/ 显示 mwArray 对象/ std:cout << "SUM = " << std:endl << SUM << std:endl;/ std:cout << "PROD = " << std:endl << PROD << std:endl;display(sum,2,3,"SUM");display(prod,2,3,"PROD");delete sum;delete pr

温馨提示

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

评论

0/150

提交评论