分享

matcom和VS?C++混合编程方法

 zhaopengxslc 2011-06-07

matcom和VS C++混合编程方法

(2011-01-18 11:02:38)
标签:

matcom

vs

c

混合编程

it

matlab功能很强,但是也许有的人会觉得安装完了之后占用空间太大,很不爽。这次呢就介绍一个叫做matcom的工具,它安装完成之后也就8M左右,可以完全脱离matlab平台自主编辑、运行m文件等,非常方便。最主要的是它可以很方便的实现与VC的混合编程。我使用的matcom版本是4.5。

1、matcom安装

安装时会要求选择编译complier,如果你装是VS的话,就只有选择VS9.0/VC/bin/c1.exe了,这样也能安装成功,但是安装之后结果不对,连最基本的加法计算都不能得到结果。Matcom的安装是需要有VC的支持的,所以必须安装VC6.0,然后在matcom安装时的complier选择VC6安装目录下VC98/bin/c1.exe就可以了(一般安装时自动搜索)。

VC6安装matcom插件:在VC6运行界面选择工具à定制à附加项和宏文件à浏览然后选择…matcom45\bin\mvcide.dll进行添加就可以了。之后就会在VC的界面上出现这个小工具matcom和VS <wbr>C++混合编程方法插件安装成功。

2、matcom4.5VC混合编程

1)自定义m函数或命令文件。

安装matcom4.5之后,在VC++环境中添加mvcide.dll之后,会出现matcom和VS <wbr>C++混合编程方法工具,编写m文件之后,再VC工程中直接用m++添加m文件,会自动编译成cpp文件和h文件。

(2)调用库函数

可以根据matlib.h头文件中的定义的函数进行调用,在VS与matcom混合编程中详述。

3、matcom4.5VS2008混合编程

(1)首先是在matcom环境下写好m函数文件,然后编译,编译时用下图所示的方式。

matcom和VS <wbr>C++混合编程方法

用这种方式不需要提供运行命令代码,如果是直接从“file”菜单编译的话,则需要提供运行命令代码,如下图所示。

matcom和VS <wbr>C++混合编程方法

matcom和VS <wbr>C++混合编程方法

编译之后就可以生成cpp文件和h文件。把这些文件拷贝到VS解决方案的根目录中去,然后把matcom安装根目录下的matlib.hv4501v.lib文件也拷贝到解决方案的根目录下去,在解决方案中红把这些文件包含进来。然后写程序就可以了,程序的具体实例可以参看2010-12-8的总结。

(2)数据接口

C++中用的数据类型是Mm类,这个类的具体内容在matlib.h文件中,这里不详细叙述。

4、直接调用matlib.h库中的函数

这里用plot函数为例,建立MFC解决方案,把matlib.h和v4501v.lib文件拷贝到解决方案目录下,加载到解决方案中去。编写这样的函数

void CtestMatcomDrawDlg::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

initM(MATCOM_VERSION); //初始化matcom库函数

if(isInitMatcom == true) //isInitMatcom是一个是否已经画图的flag,如果已经画过就置真,然后在画图之前用clf清除原图;否则为假。

{

clf();

}

CWnd *p1 = NULL;

p1=(CWnd *)GetDlgItem(IDC_DRAWPIC); //得到用于显示图像Static text控件的ID

Mm plothandle = winaxes(p1->m_hWnd); //将Static text的句柄设置赋给画图句柄

//这部分代码是对图的修饰

title((CL(TM("COS函数图形和sin函数图形"))));

xlabel((CL(TM("x"))));

ylabel((CL(TM("y"))));

set(plothandle,(CL(TM("Color")),TM("black")));

set(plothandle,(CL(TM("Box")),TM("on")));

//下面的代码就是确定要画的数据

Mm x,y;

x=linspace(m_X1 * pi, m_X2 * pi, 100);

y=mcos(x);

plot((CL(x), y, TM("y")));

y=msin(x);

plot(( CL(x), y, TM("y")));

isInitMatcom = true;

exitM();//结束库函数的调用

}

上面的例子是画的余弦函数和正弦函数的曲线,所用的这些函数都是matlib.h文件中有的,这些函数的用法和matlab中基本一致。这里详细介绍这两个:linspace(), plot()。

linspace(x1, x2, n)是建立一个起点在x1,终点在x2的向量,向量共n个点。Linspace()的重载格式还有Mm DLLI linspace(cMm x1, cMm x2);//x1是起点,x2是终点,如果二者间隔稍大就会自动分为101个点

还有其他的格式,这里不再赘述。

Plot()函数就是绘制曲线的函数了,它只接受一个参数,原型为Mm DLLI plot(cMm varargin);如果使用plot((CL(y)));的方式,纵坐标是y的范围,曲线是y的曲线,横坐标根据y的点数来定,例如若y有101个点,则横坐标就是从0到100;如果有专门想用来作为横坐标的向量数据,则应采用这种函数方式plot((CL(x), y));。还可以对曲线进行修饰,如plot((CL(x), y, TM("y")));则是绘制曲线颜色为黄色。

程序运行结果如下:

matcom和VS <wbr>C++混合编程方法
matcom和VS <wbr>C++混合编程方法
matcom和VS <wbr>C++混合编程方法

如果想在没有安装matcom的电脑上运行此程序,只需将matcom安装目录下的matlib.hv4501v.lib以及系统目录下的v4501v.dllago4501.dll文件拷贝到工程目录下就可以。

5、一些限制

(1)因为matcom做的太成功了,威胁到了matlab,现已经被malab收够了,所以matcom最高版本就是4.5了,以后matlab有什么更新matcom不能及时跟上步伐。(2)因为matcom是基于VC的,所以与VS C++混合编程时会有一些小问题,主要是matlib.h中的ans定义和math.h中的abs定义重复,具体原因这里不再详述,只要把matlib中的重定义的abs注释掉就可以。

(3)安装matcom时必须已经安装了VC。

(4)matcom和VS C++混合编程时,需要手动编译,不如在VC下方便。而且matcom不支持C#。

以上就是在做matcom和VS C++混合编程时的一些心得体会,如果说的不对的地方,也请指正。如果各位有什么好的matlab 和VS混合编程的好方法,如果愿意的话,也希望多多指教。

matcom和VS <wbr>C++混合编程方法
图片来自StayReal官网~







    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多