当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 精通VC与MATLAB联合编程:编译器的使用

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 精通VC与MATLAB联合编程:编译器的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 177 ::
收藏到网摘: n/a

精通VC与MATLAB联合编程<八>——编译器的使用

作者:邓科

下载源代码

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

  在上一章中对MATLAB 编译器做了简要介绍,并介绍了如何将m文件转换成VC可调用的dll文件,在这章中介绍如何利用编译器将m文件转换成对应的C\C++文件,并在VC中调用。这章节中的例子是在第四章中介绍过的解线形方程组。
  首先要保证编译器设置正确,编译器的设置可以参考前面两章的内容。如果以前已经进行了配置就不需要这一步。

1、在MATLAB中编写如下函数:

function [x]=gjfcz(A,b)%A=[-1.5 1 2; 4 2 3 ; -3 2 8]%b=[3;5;6]x=A\b
保存名为gjfcz.m,该函数的功能为求解线形方程组,可参考第四章的内容。

2、在MATLAB的命令窗口输入以下命令:
mcc –m gjfcz.m

该命令用来生成对应的C文件和可执行程序。在MATLAB工作目录下(一般是MATLAB\work)将会生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h,gjfcz_main.c,其中gjfcz.c,gjfcz.h是我们需要的文件。

3、新建名为JXXFC基于对话框的工程,面板上添加一个按扭。
4、拷贝gjfcz.c,gjfcz.h两文件到工程目录下,并将文件引入工程(Project->Add to Project->Files)。
5、为按扭添加如下响应代码:

void CJXXFCDlg::OnButton1() { static	double Adata[]={-1.5,4,-3,1,2,2,2,3,8}; static	double bdata[]={3,5,6}; double Xdata[100]; mxArray *A = NULL;//赋初值 mxArray *b = NULL; mxArray *x = NULL; /* 使用自动内存管理*/ mlfEnterNewContext(0, 0); //创建矩阵 mlfAssign(&A, mlfDoubleMatrix(3, 3, Adata, NULL)); mlfAssign(&b, mlfDoubleMatrix(3, 1, bdata, NULL)); InitializeModule_gjfcz(); x=mlfGjfcz(A,b);//调用gjfcz.c中的函数求解 TerminateModule_gjfcz(); memcpy(Xdata,mxGetPr(x),3*sizeof(double)); // mxGetPr(x)用来得到x的地址 CString R; R.Format("%f\n%f\n%f",Xdata[0],Xdata[1],Xdata[2]); MessageBox(R); /* 释放矩阵所占的内存*/ mxDestroyArray(A); mxDestroyArray(b); mxDestroyArray(x); /* 禁用自动内存管理*/ mlfRestorePreviousContext(0, 0);}
编译、连接,运行结果如图1:
 

图1

  本程序在VC6.0+MATLAB6.5环境下调式通过,在VC和MATLAB接口编程中,使用编译器将m文件编译成C\C++文件,然后在VC中调用该C\C++文件是最常用的方法。 本例中虽然使用了C\C++函数库中的函数,但比起完全使用C\C++函数编写程序要简单了许多,可见要灵活的使用编译器,对C\C++函数库有一定的了解是很必要的,MATLAB提供有函数库的帮助文档cmath_ref2b.pdf和cmath_ug2b.pdf,使用的时候可以查阅。再次说明的是,很多朋友已经在使用MATLAB7.0的版本,7.0的版本在对C\C++接口技术上做了很大改动,不是一般的升级,对以前的版本也不兼容。新的版本提供了一个类似于VC的类库,用了一下,感觉不是很好。