分类:
2008-10-13 16:48:40
精通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、设置头文件和库文件的路径,可以参考
,配置完成如图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。
mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m生成的文件将会保存在当前目录下,默认的当前目录为:MATLAB根目录\work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,这三个文件是我们需要的。
#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:
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帮助文档。