MATcom是MATHworks公司退出的第一个由MATLAB到C++的编译开发软件平台,其最新版本为4.5,集成调试编译环境卫MIDEVA。通过MATcom连接MATLAB m文件有以下三种方法:
(1) 经过简单的设置,由MIDEVA将m源文件转换为C/C++,然后添加到MSVC工程中。
(2) 由MIDEVA直接生成EXE文件,然后在VC中通过Shell调用。这种方法简单方便,但运行时出现一个控制台窗口,而且由于VC和MATLAB之间不能交互,通用性差,仅适用于VC调用MATLAB实现图形显示的场合。
(3) 通过Visual MATcom工具条,使用Add-in,这种方法提供了MATLAB和VC直接集成的途径,且可快速集成m文件到VC工程中创建独立的C/C++应用程序、C MEX DLL,在调试过程中可以查看矩阵变量的值,可直接修改m源文件而不是修改生成的C/C++文件。
安装MATcom并生成Visual MATcom工具条
(1) 下载MATcom。推荐下载地址:
(2) 安装。安装之前,首先在matlab的安装目录下建立文件夹:\MATLAB701\bin\toolbox
\matlab\general。matcom4.5在安装时需要你输入口令,Matcom4.5的口令为FREE-4.5-1193046-80295111。安装完成后,mideva在window的注册表中HKEY_CURRENT_USER\Software\MathTools\Matcom\4.50\License\下面添加一个键,键名默认,键值为FREE-4.5-1193046-80295111。你如果删除它,再次启动matcom的时候,就会再次询问口令。不过好在如果通过这个口令之后,程序发布时就不再有限制了,也就是在这个注册后的系统中编译的程序,发布时就不用代一个注册文件了
(3) 第一次运行时,MATcom4.5自动搜索VC编译器并提示用户是否安装,之后提示是否安装有MATLAB,回答安装后,如果没有建立文件夹\MATLAB701\bin\toolbox\matlab\general,则发生错误。手动建立文件夹,再重新启动MATcom4.5即可。
(4) 之后启动MATLAB,运行以下命令:
cd c:\matcom45 % MATcom的安装路径
diary mpath
matlabpath
diary off
(5) 复制%MATcom45%\bin\usertype.dat文件到%VC%\Common\MSDev98\bin目录。
(6) 运行Visual C++,并从菜单中选择Tools->Customize->Add-ins and Macro Files,选择Browse,改变文件类型为Add-in(.dll),选择%MATcom45%\bin\mvcide.dll文件,确定。
(7) 在Visual C++的开发环境中可以看到一个Visual MATcom工具条,安装成功。
通过MATcom把.m文件编译为stand_alone的程序,不需要MATLAB系统,仅需要复制一些必要的dll文件,包括:v4501v.dll,ago4501.dll(或者是c4500v.dll,ago4500.dll,可能与操作系统有关)以及%MATLAB%\bin\win32目录下以lib开头的dll文件。
利用matlab 下载Matcom实现基于MATLAB的混合编程
通过Matcom连接M函数这类脚本语言或者高级算法语言有三种办法:—是将M文件编译成C++代码,然后在C++工程中插入这些代码,最后编译成为独立的可执行程序;二是直接在C++程序中使用Matcom提供的Matrix<lib>,方法与一相似,但常用。最后一种是利用MIDEVA直接生成EXE文件,然后在VC中通过shell调用,方法简单,但通用性差,仅适用于VC中调用Matlab实现图形显示的场合。
Mideva软件平台本身的功能相当强大,提供近千个Matlab的基本功能函数,通过必要的设置,就可以直接实现与C++的混合编程,而不必再依赖Matlab;同时,Mediva还提供编译转换功能,能够将Matlab函数或编写的Matlab程序转换为C++形式的DLL,从而实现脱离Matlab环境对Matlab函数和过程的有效调用,这样就有可能实现对Matlab强大的工具箱函数的利用。
Mideva的缺点是C++与Matlab混合编写的应用软件必须携带必要的DLL,从而增大了软件的体积(约4M),同时也不能对所有的Matlab函数提供支持,例如采用类库进行设计的部分函数。
本节将以VC++6.0和Matcom为例,1,详细介绍如何利用Matcom进行VC++与Matlab的联合编程(即一);2 ,介绍一下在VC++中怎样使用Matcom C++矩阵库(即二)。
Mideva软件平台本身的功能相当强大,提供近千个Matlab的基本功能函数,通过必要的设置,就可以直接实现与C++的混合编程,而不必再依赖Matlab;同时,Mediva还提供编译转换功能,能够将Matlab函数或编写的Matlab程序转换为C++形式的DLL,从而实现脱离Matlab环境对Matlab函数和过程的有效调用,这样就有可能实现对Matlab强大的工具箱函数的利用。
Mideva的缺点是C++与Matlab混合编写的应用软件必须携带必要的DLL,从而增大了软件的体积(约4M),同时也不能对所有的Matlab函数提供支持,例如采用类库进行设计的部分函数。
本节将以VC++6.0和Matcom为例,1,详细介绍如何利用Matcom进行VC++与Matlab的联合编程(即一);2 ,介绍一下在VC++中怎样使用Matcom C++矩阵库(即二)。
1. 目前,Matcom的最高版本为4.5。首先安装Matcom 4.5,如下图:
安装Matcom前要已求安装VC++6.0。在安装过程中出现选择编译器对话框,选择”是” 如下图:
安装Matcom前要已求安装VC++6.0。在安装过程中出现选择编译器对话框,选择”是” 如下图:
出现选择是否安装了Matlab时,如果本机上安装的是Matlab 5.3版本,可以选择“是(Y)”确认,因为Matcom4.5不支持Matlab 6.1以上的版本。其他选项采用默认设置。Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数到路径用的。
安装完成后,在“<Matcom 根目录>lib”下,可以到使用MatcomC++矩阵库(Matrix Lib)的头文件matlib.h和v4501v.lib文件,在Windows操作系统目录的system32目录下,可以到使用MatcomC++矩阵库的动态链接库文件v4501v.dll。启动界面MIDEVA,如下图。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。
Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格,否则显示为乱码。
下面详细介绍如何将m文件编译后放入VC++中。
启动MIDEVA ,File->New,新建如下huatu.m文件。
m文件保存的默认位置为:matcom安装目录matcom45,生成的C++文件保存的默认位置为matcom安装目录matcom45Debug,本例matcom安装目录为C盘 即 C:matcom45Debug,
启动MIDEVA ,File->New,新建如下huatu.m文件。
m文件保存的默认位置为:matcom安装目录matcom45,生成的C++文件保存的默认位置为matcom安装目录matcom45Debug,本例matcom安装目录为C盘 即 C:matcom45Debug,
在该目录下将会产生huatu.h、huatu.cpp、huatu.r 、huatu.obj文件。
在VC++中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。在面板上添加一个ID为IDC_BUTTON1按扭。
C:matcom45Debug目录下的huatu.cpp文件的内容拷贝到void CExamleDlg::OnButton1()如下,
void CExampleDoc::OnButton1()
{
dMm(x); dMm(y);
void CExampleDoc::OnButton1()
{
dMm(x); dMm(y);
#line 1 "c:/matcom45/huatu.m"
call_stack_begin;
#line 1 "c:/matcom45/huatu.m"
_ x = colon(-2.0,0.1,2.0);
#line 2 "c:/matcom45/huatu.m"
_ y = power(x,2.0);
call_stack_begin;
#line 1 "c:/matcom45/huatu.m"
_ x = colon(-2.0,0.1,2.0);
#line 2 "c:/matcom45/huatu.m"
_ y = power(x,2.0);
#line 3 "c:/matcom45/huatu.m"
_ display( plot((CL(x),y)) );
call_stack_end
}
_ display( plot((CL(x),y)) );
call_stack_end
}
将C:matcom45lib下的matlib.h 和v4501v文件和C:matcom45debug下的huatu1.h文件拷贝到工程Example目录下,然后在VC中将库文件和头文件加入到工程中:工程->添加工程->Files,选择刚刚拷贝到Example目录下的matlib.h 、v4501v和huatu1.h文件
五,在ExamleDlg.cpp中加入如下代码:
#include "matlib.h"
#include "huatu.h"
在void CExamleDlg::OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”如下。
void CExampleDoc::OnButton1()
{
initM(MATCOM_VERSION)
五,在ExamleDlg.cpp中加入如下代码:
#include "matlib.h"
#include "huatu.h"
在void CExamleDlg::OnButton1()中分别添加一个初始化类库调用函数”initM(MATCOM_VERSION)”和一个结束类库调用函数”exitM()”如下。
void CExampleDoc::OnButton1()
{
initM(MATCOM_VERSION)
dMm(x); dMm(y);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论