MatCom_C++混合编程
安装注意:机子上一定要有VC6.0的编译器(如何安装,参考网上下载的文档)
实践部分:
文件的配置:
一.对于VC++6.0
1.拷贝matlib.h和v450v.lib文件到当前工作路径(不拷贝也行)
2.在VC6.0的Workspace中直接添加v450v.lib
或者:Tools->options->Directories-:Library files ->添加库文件v4501v所在的路径 。然后 Project->Settings->Link:在Object/library modules下添加入v4501v.lib
3.Tools->options->Directories-:Include files ->填加matlib.h所在的路径。(这个是添加头文件)
二.对于VS2010
1.项目->XX属性->配置属性:VC++目录:包含目录->填加matlib.h所在的路径。2
2. 项目->XX属性->配置属性:VC++目录:库目录->添加库文件v4501v所在的路径(在 连接器:常规->添加库文件v4501v所在的路径 也可以)。
3.项目->XX属性->配置属性:连接器:输入->附加依赖项->(填入)v4501v.lib
4.也可以像VC6.0一样,不配置v4501v.lib文件的路径,不在“附加依赖项”下填入v4501v.lib ,直接在解决方案管理器里添加v4501v.lib即可。
三.
1.如果把matlib.h 拷贝到当前工作目录中,则不需要包含目录了,只需要把#include <matlib.h>改成 include ”matlib.h”。因为双引号表示在当前的工作路径中寻找该文件。
2.直接把v4501v.lib拷贝到当前的工作目录中,也不需要把它的路径包含到库目录中了,只需要在“附加依赖项”下填入v4501v.lib即可。
*v4501v.lib改成其它名字是无所谓的,当然,还是直接添加v4501v.lib最方便了,即不需要把路径包含到库目录中,又不需要在附加依赖项下些入v4501.lib。
四.代码:(通过MIDEVA编译两个cpp源文件,一个是实现函数功能的源文件,一个是调用函数的源文件。)
#include<matlib.h>
#include<iostream>
usingnamespacestd;
Mmclass1func(Mmf1,Mmf2,i_o_t,Mm&maxf__o,Mm&minf__o){
begin_scope
f1.setname("f1");f2.setname("f2");
dMm(maxf);dMm(minf);dMm(t);dMm(y1);dMm(y2);
#line1"c:/matcom45/my_mfile/class1func.m"
call_stack_begin;
#line1"c:/matcom45/my_mfile/class1func.m"
// nargin, nargout entry code
doubleold_nargin=nargin_val;if(!nargin_set)nargin_val=2.0;
nargin_set=0;
doubleold_nargout=nargout_val;if(!nargout_set)nargout_val=2.0;
nargout_set=0;
// translated code
#line2"c:/matcom45/my_mfile/class1func.m"
_ t=linspace(0.0,1.0,400.0);
#line3"c:/matcom45/my_mfile/class1func.m"
_ y1=sin(2.0*pi*f1*t);
#line4"c:/matcom45/my_mfile/class1func.m"
_ y2=cos(2.0*pi*f1*t);
#line6"c:/matcom45/my_mfile/class1func.m"
_ plot((CL(t),y1));
#line7"c:/matcom45/my_mfile/class1func.m"
_ display(figure());
#line7"c:/matcom45/my_mfile/class1func.m"
//分开画出第二条曲线
#line8"c:/matcom45/my_mfile/class1func.m"
_ plot((CL(t),y2));
#line10"c:/matcom45/my_mfile/class1func.m"
_ maxf=max(f1,f2);
#line11"c:/matcom45/my_mfile/class1func.m"
_ minf=min(f1,f2);
call_stack_end;
// nargin, nargout exit code
nargin_val=old_nargin;nargout_val=old_nargout;
// function exit code
f1.setname(NULL);f2.setname(NULL);
maxf__o=maxf;minf__o=minf;
returnx_M;
end_scope
}
Mmclass1func(Mmf1,Mmf2){
begin_scope
doubleold_nargin=nargin_val;nargin_val=2.0;nargin_set=1;
doubleold_nargout=nargout_val;nargout_val=1.0;nargout_set=1;
dMm(maxf__o);dMm(minf__o);
class1func(f1,f2,i_o,maxf__o,minf__o);
nargout_val=old_nargout;
nargin_val=old_nargin;
return(maxf__o);
end_scope
}
intmain()
{
initM(MATCOM_VERSION);//初始化Matlab_C++库
dMm(f1);dMm(f2);dMm(maxf);dMm(minf);
#line1"c:/matcom45/my_mfile/class1call.m"
call_stack_begin;
#line1"c:/matcom45/my_mfile/class1call.m"
_f1=2.0;
#line2"c:/matcom45/my_mfile/class1call.m"
_f2=4.0;
#line3"c:/matcom45/my_mfile/class1call.m"
_/*[maxf,minf] = */class1func(f1,f2,i_o,maxf,minf);display(maxf);display(minf);
call_stack_end;
exitM();//结束使用Matlab_C++库
inti;
cin>>i;
return0;
}