1、设置项目编译选项
首先建立一个新的项目,或者打开一个已有的项目,然后选择菜单:
Project-> Settings-> C/C++
Category:Preprocessor
Preprocessor
添加:
Category:
选择:
Through
2、调设置项目连接选项
首先要从下面几个函数定义文件(*.def)生成相应的导入库文件(*.lib)
libmmfile.def
libmcc.def
libmatlb.def
libmx.def
libmat.def
它们位于目录c:\matlab\extern\include
用下面命令导出库文件:
lib
lib
lib
lib
lib
将它们放入你的项目连接选项
Project-> Settings-> Link
Category:Input
Object/library
添加:libmatpm.lib
注1:
注2:
Ignore
添加:
注:
以上的这些lib文件,我已经做好了,打了个包放在这里下载:matlablibs.zip
3、设置编译环境
Tools-> Options-> Directories
Include
c:\matlab\extern\include
c:\matlab\extern\include\cpp
Library
c:\matlab\extern\lib
c:\matlab\extern\include
注:下面这个目录是那些lib所在的地方。
如果都挪到上面的目录,这个自然就不要了。
4、编写程序
用MCC命令生成的CPP文件和自己手工编写的CPP文件,
程序的语法原则上也是一样的.
(1)添加自己编写的程序模块
用下面文件头:
#include
#include
然后,
(2)嵌入mcc生成的文件
在MATLAB下用下面格式的命令生成cpp文件
mcc
得到test.hpp,
将test.cpp加入项目,
最后,摁F7编译就可以了。
5、实例
上面罗罗嗦嗦一大堆,肯定让你打哈欠了:P
没关系,其实还是挺简单的,这里有个VC的project,用C++数学库解决了一个幼儿园的算术题,下载回去看看吧,马上就明白了。
MccDemo.zip
这里先说明一下:
MATLAB程序test.m:
function
sum
prod
用来计算两个数的和与积。注意这是两个返回变量的情况。
另外,x,y当然可以是数组。
用mcc命令生成了test.hpp和test.cpp。
文件demo.cpp:
#include
#include
#include
void
{
}
由于采用了C++数学库,语法很简单。注意数组的赋值、其中数据的存取,这些都要仔细地看手册。
最后是跳出一个消息框,显示计算结果。
改程序启动之后,选择菜单mcc-> demo即可。
方法2 dll调用方式
Matlab6.1与VC6混合编程的方式很多:
用Matlab处理复杂的算法,用VC、VB甚至Delphi来处理GUI,比较爽。
以DLL方式调用M文件中的函数,就是重要的手段。
首先要按帖子Matlab6.1与VC6混合编程小结
下面不废话,给出一段例子,
:假设有M文件:mfile.m
1:在Matlab6.x中使用命令:
2:将生成的a.dll,a.lib,a.h放在工程目录下。
3:在工程中加入a.lib,并#include
4:按以下格式调用:
注意:a.h中的函数的参数和返回值大多为矩阵形式,使用方法见贴(2)。
方法2 dll调用的另一个说明
Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数。但在很多情况下,我们不得不使用VC编程。那么,如何在VC中利用matlab的资源呢?在这里我简要的以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件。繁多的理论就不说了,简明扼要的说一个实例。相信大家看过之后都会马上学会的J
这里为了简单起见,我在matlab中定义了一个函数,其m文件如下:
function y = add_zh(a,b)
y=a+b
保存为myfunct.m
然后出现如下提示:
--------------------------------------------------------------------------------------
Select a compiler:
[1] Borland C++Builder version 5.0 inC:\Program Files\Borland
[2] Lcc C version 2.4 inF:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 inC:\Program Files\Microsoft VisualStudio
[0] None
Compiler:
--------------------------------------------------------------------------------------
这里我们选择’3’。(如果使用其他的编译器比如BCB,那么就可以相应的选择’1’)
然后,继续在命令行状态下输入:
mbuild –setup
--------------------------------------------------------------------------------------
Please choose your compiler for buildingstandalone MATLAB applications:
Would you like mbuild to locate installedcompilers [y]/n? y
Select acompiler:
[1] Borland C++Builder version 5.0 inC:\Program Files\Borland
[2] Lcc C version 2.4 inF:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 inC:\Program Files\Microsoft VisualStudio
[0] None
Compiler:
--------------------------------------------------------------------------------------
这里需要几步确认。大家按情况操作即可。
在matlab命令行中输入:
mcc -t -h -L C -W lib:ppp -T link:libmyfunct.m
然后,将上面这3个文件拷贝到VC工程所在的目录中,以便VC调用之。
首先,在cpp文件中加入:
然后,设置VC的链接库。在project-settings-link下的object/library modules中加入:
ppp.lib libmx.lib libmatlb.liblibmmfile.lib
至此,VC的编译环境设置完毕。下面就是编程部分了。
先给出 VC实现的源代码:
------------------------------------------------------------------------
voidCMatDlg::OnButton1()
{
}
------------------------------------------------------------------------
相信看到里面的注释,我们就明白的差不多了。
VC编程以实现对 matlab函数的调用,例如 VC中我们实现两个 double型的相加,则需要做上述的编程:首先定义两个数组并存入我们要进行函数操作的数据(也就是所谓的实参);然后将这两个数组转换为matlab 可以识别的矩阵;然后调用 m文件中自定义的函数,对矩阵进行操作;最后将结果再转回 VC 支持的数据格式:
至此,经 matlab函数处理过的数据已经存入了 VC中的 result变量。
大家可以看出来,在进行调用的时候,我们使用的是 m 文件的文件名 myfunct,而不是 m文件中定义的 add_zh(a,b)