在网络上很多关于MATLAB与VC++混合编程的程序,但是基本没有验证,且设置过程有错误。经过本人的尝试,我得出了正确的设置步骤,现写出来供大家参考。
一、MATLAB的M函数编写
1、这里的M函数代码如下:
function mccdemo1()
x = -5:0.1:5;
y = sin(x);
plot(x,y);//画图
xlabel('x');
ylabel('y');
将其保存为名字为mccdemo1.m的文件。
2、将该M函数编译成C++动态链接库
1)、在环境变量(我的电脑右键-高级)path中加入\bin\win32;
2)、添加环境变量matlab值设为<
MATLAB71_root >即matlab7.1的安装路径;
3)、配置mbuild使用的C/C++编译器;
在Matlab命令窗口中输入:
mbuild -setup
按照提示选择VC6.0的编译器,完成后在Matlab命令窗口中输入:
mex
-setup
同样选择VC6.0的编译器,就完成编译器的安装和配置。
接下来我们要把.m文件存储的程序编译成dll文件,在matlab命令窗口中输入:
mcc -W
lib:mccdemo1 -T link:lib mccdemo1.m
这个需要等一小段时间,最终,在当前目录下生成了
其中CTF、DLL、H、LIB文件是我们后面需要的。
二、VC中的操作
在vc中建立一个MFC
AppWizard[exe]基本对话框工程,名字叫做mccdemo1app.
1 )在 VC 中创建一个 MFC 工程(本人创建的为基于对话框的),环境设置如下:
A. Tools->Options->Directories->Show directories for : Include files->
7root> \Extern\Include ;
B. Tools->Options->Directories->Show directories for : Library files->
7root> \Extern\Lib\Win32\Microsoft\msvc60 ;
C. Project->Setting->C/C++->Category : Code Generation->Use run-time library
: Debug Multithread DLL ;
D. Project->Setting->Link->Category : Input->Object/library modules : test1.lib
mclmcr.lib libmx.lib libmat.lib libeng.lib
2 )拷贝 MATLAB 当前目录下刚才用 mcc 生成的 mccdemo1.h , mccdemo1.dll , mccdemo1.lib ,以及 mccdemo1.ctf 文件到 VC 当前工程目录下,并用 Project->Add to Project->Files… 将 mccdemo1.h 加入到当前工程中。
3 )在当前工程的对话框的头文件和cpp中加入 #include "mccdemo1.h" 与 #include "mclmcr.h" ;
这些设置过程非常重要,请严格按照此过程设置。
工程设置到此就结束了,下面开始写代码:
首先需要在对话框的初始化程序BOOL
CMccdemo1appDlg::OnInitDialog()内写
if(
!mclInitializeApplication(NULL,0) ) //matlab环境初始化
{
AfxMessageBox( "Could not
initialize the application.");
exit(1); //可以是return FALSE;
}
if
(!mccdemo1Initialize())
{
AfxMessageBox("Could not
initialize the library.");
exit(1); //可以是return FALSE;
}
//调用M函数
void CMccdemo1appDlg::OnOK()
{
// TODO: Add extra
validation here
//此处为dll中的函数准备好参数,然后调用
mlfMccdemo1();
//CDialog::OnOK();一定要注释掉这一行,否则画不出图形就销毁对话框了
}