MATLAB7.1与Visual C++6.0混合编程

来源:互联网 发布:js 触发事件 trigger 编辑:程序博客网 时间:2024/06/05 16:51
原文地址:MATLAB7.1与Visual C++6.0混合编程作者:蚂蚁的乐趣

    在网络上很多关于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中加入<MATLAB71_root>binwin32;

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

这个需要等一小段时间,最终,在当前目录下生成了

matlab7.0.1与vc6.0混合编程之DLL - 蓝眼泪 - 蓝眼泪的博客

其中CTF、DLL、H、LIB文件是我们后面需要的。

二、VC中的操作

在vc中建立一个MFC AppWizard[exe]基本对话框工程,名字叫做mccdemo1app.

)在 VC 中创建一个 MFC 工程(本人创建的为基于对话框的),环境设置如下:

A. Tools->Options->Directories->Show directories for : Include files-><matlab

7root> ExternInclude ; 

B. Tools->Options->Directories->Show directories for : Library files-><matlab

7root> ExternLibWin32Microsoftmsvc60 ; 

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 

)拷贝 MATLAB 当前目录下刚才用 mcc 生成的 mccdemo1.h , mccdemo1.dll , mccdemo1.lib ,以及 mccdemo1.ctf 文件到 VC 当前工程目录下,并用 Project->Add to Project->Files… 将 mccdemo1.h 加入到当前工程中。 

)在当前工程的对话框的头文件和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();一定要注释掉这一行,否则画不出图形就销毁对话框了

}


0 0
原创粉丝点击