Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2025080
  • 博文数量: 960
  • 博客积分: 52560
  • 博客等级: 大将
  • 技术积分: 13131
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-31 14:15
文章分类

全部博文(960)

文章存档

2011年(1)

2008年(959)

我的朋友

分类: C/C++

2008-08-01 17:08:12

下载本文示例代码
下载源代码

浅析VC与MATLAB联合编程<一>
浅析VC与MATLAB联合编程<二>
浅析VC与MATLAB联合编程<三>
浅析VC与MATLAB联合编程<四>
精通VC与MATLAB联合编程<五>
精通VC与MATLAB联合编程<六>

  MATLAB Compiler 是MATLAB自带的一个编译器,它能将m文件转化成 C、C 或p等各种类型的源代码,并根据需要生成可执行文件、lib文件(库文件)、dll文件或S函数文件等。MATLAB 6.5 使用的编译器包括了MATLAB 的C\C 数学库函数以及图形库。动态链接库(dll)是编写软件中常用的一种技术,MATLAB提供了将M文件编制成dll文件的方法,本文就介绍如何在MATLAB6.5中将m文件z转化成dll文件,然后在VC中调用该dll文件。

1、必须保证编译器的正确配置,因为编译器使用了C\C 库函数,所以在使用前需要使用

mex -setup 和
mbuild -setup

两个命令对编译器进行配置,如果以前已经进行了配置就不需要这一步。

2、设置头文件和库文件的路径,可以参考 精通VC与MATLAB联合编程<六>,配置完成如图1和图2:


图1


图2

读者根据MATLAB安装实际情况输入头文件和库文件的路径。

3、在MATLAB打开文本编辑器(File->New->M-file)写一个简单的m函数:


function y=huatu_test()

x=-10:0.1:10;

y=sin(x);

plot(x,y,''*'')

文件保存为huatu_test.m。

4、在MATLAB命令窗口用如下命令生成dll文件和调用dll所需要的文件:

mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m 
   生成的文件将会保存在当前目录下,默认的当前目录为:MATLAB根目录\work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,这三个文件是我们需要的。

5、在VC中新建一个名为ceshi基于对话框的工程,在工程中添加一个名为"测试"的button按钮。 将dlltest.h 、dlltest.lib和dlltest.dll文件拷贝到当前工程目录下,并通过Project->Add To Project->Files 选择拷贝到当前目录下的三个文件,将文件引入工程。

6、在ceshiDlg.cpp文件中添加头文件dlltest.h

#include "dlltest.h"

打开dlltest.h文件,里面有有关函数的定义,找到其中三个函数:

extern mxArray * mlfHuatu_test(void);

extern void dlltestInitialize(void);

extern void dlltestTerminate(void);

   从函数意思不难知道它们的作用,dlltestInitialize用来初始化dll库,dlltestTerminate用来结束调用dll,mlfHuatu_test为主程序执行函数。将三个函数拷贝到button响应代码中,进行修改:

void CCeshiDlg::OnButton1() 

{

 dlltestInitialize();

 mlfHuatu_test();

 dlltestTerminate();

}

编译、执行程序,点击结果如图3:


图3

  可以看出,相比VC编写dll文件,利用MATLAB 编译器生成dll文件,以及在VC中调用该dll文件要方便和简单的多。利用编译器还可以根据需要生成C\C 源文件,可执行文件等。MATLAB6.5的编译器为3.0版本,MATLAB7.0的编译器为4.0版本,4.0版本的编译器对原编译器进行了很多改进,3.0很多方法都不再使用,上述方法如果在7.0版本上使用会出现错误。

利用mcc命令,通过不同的参数设置可以生成不同的文件,例如:

mcc -B sgl myfun 将myfun.m文件生成对应的c文件和使用c图形库的可执行程序 

mcc -B sglcpp myfun 将myfun.m文件生成相应的c  文件和使用c  图形库的可执行程序 

mcc的参数实际上有很多,例如:

mcc -t -W main -L C -T link:exe -h libmmfile.mlib myfun

该命令是将myfun.m生成可执行c程序
为了简化选项设置,编译器提供了宏选项,实际上上述命令利用一个参数就可以了:

mcc -m myfun

该命令和上述命令是等价的,也是用来生成可执行c程序。关于mcc命令详细参数设置可以参考MATLAB帮助文档。
大家在使用VC调用MATLAB中遇到什么问题,可以发电子邮件到c_dinco@sina.com,把遇到的问题说清楚,正在写书,同时有什么好的建议,也欢迎发邮件来。

关于程序运行的说明:
1、根据实际情况修改VC中头文件和库文件的路径;
2、如果自己编写的程序图形不能显示菜单栏和工具栏,拷贝文件夹bin到当前目录下

下载本文示例代码
阅读(331) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~