博文

浅析VC与matlab接口编程(三、四、五)(2006-10-19 23:21:00)

摘要:浅析VC与Matlab联合编程<三>

作者:邓科   在“浅析VC与Matlab联合编程<一>”和“浅析VC与Matlab联合编程<二>”中介绍了matcom,这个工具可以将用matlab写的m文件翻译成C++文件,或者是可执行文件(exe)或库文件(dll)。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。
  实际上VC与matlab的接口实现方法有很多种,matcom只是其中一种,本文再介绍一种比较容易实现的方法:COM接口方法。COM(Compponent Object Model组件对象模型)是一项比较复杂的技术,详细讲的话几本书也讲不完,所以在这里不作介绍,本文通过一个例子详细介绍如何在matlab下做COM组件,以及如何在VC中调用COM组件。
  首先在Matlab编辑器里编辑m函数文件:启动matlab->File->New->M-file 函数内容如图1:该函数无输入输出参数,文件保存为huatu.m。


图1 m函数huatu.m

在matlab下建立COM组件,步骤如下:
1、在matlab command window 输入如下命令:
>> comtool
出现com编辑界面,如图2:


图2 com组件编辑界面

2、新建工程:File->New Project…,如图3。

图2 com组件属性设置

3、设置组件属性,在"Component name"项中填写组件名称"component",这时候会自动生成类"component",在"Class name"项中填写类名称"huatu",如图4,

图4 com组件属性设置1

  为了便于区分,选中"Classes"中的"component",点击“remove”按钮,将类component移除,再点击"Add>>"添加新类huatu,结果如图5。点击"OK",接下来出现一个对话框,选择"Yes".

图5 com组件属性设置2
......

阅读全文(241) | 评论:0

浅析VC与matlab接口编程(一)(二)(2006-10-19 23:18:00)

摘要:浅析VC与matlab接口编程(一)

作者:邓科 下载源代码

  Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便 得多。本文将结合作者编程经验,以VC6.0和Matcom为例,详细介绍如何利用Matcom进行VC与Matlab的联合编程。
  Matcom安装安装Matcom前要已求安装VC6.0。在安装过程中出现选择编译器对话框,选择“是”(图一)。出现选择是否安装Matlab时,选“否”。其他选项采用默认设置。Matcom可以独立于Matlab运行,但需要外部的C++编译器,指定Matlab的位置是为了让编译文件中需要的一些系统函数找到路径用的。

               图一

  安装完成后,启动界面MIDEVA(图二)。MIDEVA集成开发环境包括命令行窗口、变量列表窗口、命令列表窗口和编译链接信息窗口等几部分,并有详细的帮助文档。

图二
Matcom命令输入方法与Matlab相同。如果安装在中文版操作系统时,输入命令前加一空格。(如图三)。

                  图三

下面详细介绍如何将m文件编译后放入VC中。
1、启动MIDEVA ,File->New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y); 将文件保存(如图四)。


    图四

m文件保存的默认位置为:matcom安装目录\matcom45,生成的C++文件保存的默认位置为:matcom安装目录\matcom45\Debug\,本例matcom安装目录为C盘 即 C:\matcom45\Debug\,在该目录下将会产生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。

2、在VC中用MFC Wizard(exe)创建一个基于对话框名为Example的工程。
在......

阅读全文(285) | 评论:0

在窗口中绘图(2006-10-09 11:36:00)

摘要:在窗口中绘图                                      在窗口中绘图 图形设备接口(GDI)与设备描述表(DC)
图形设备接口(GDI)
许多MS-DOS程序都直接往视频存储区或打印机端口输送数据, 
这种做法的不利之处在于需要对每种显示卡或打印机类型提供相应的驱动程序。
Windows则提供了一抽象的接口,称之为图形设备接口(GDI)。
Windows己经提供了各种显示卡及打印机的驱动程序,
这样我们的程序就可以不必关心与系统相连的显示卡及打印机的类型。
我们的程序可以通过调用GDI函数和硬件打交道,
而各种GDI函数会自动参考被称为设备环境(CDC)的数据结构。
Windows会自动将设备环境结构映射到相应的物理设备,并且会提供正确的输入输出指令。 设备描述表(DC) 在Windows环境中,各程序的输出必须限制在自己的窗口中。
GDI使用一种简单的机制保证在窗口中画图的各程序遵循这个规则。
这种机制即为设备描述表(DC); 当Windows程序在屏幕、打印机或其它设备上画图时,
它并不是将像素直接输出到设备上,而是将图绘制到由设备描述表表示的逻辑意义上的"显示平面"上去。 设备描述表是深寓于Windows中的一种数据结构,
它包含GDI需要的所有关于显示平面情况的描述字段,包括相连的物理设备和各种各样的状态信息。 设备描述表对象
在使用MFC编制Windows程序时,设备描述表具有更加突出的作用。
除了可作为通往各种设备的桥梁之外,设备描述表对象还封装了程序用来产生输出的GDI函数。
在MFC中,你不用捕获设备描述表句柄和调用GDI输出函数,至少不必直接捕获和调用,
而是通过创建一设备描述表对象并调用它的成员函数来画图。 设备描述表句柄......

阅读全文(4136) | 评论:0

VC-MATLAB混合编程几个例子运行显示(2006-09-26 20:44:00)

摘要:




1、C中调用Matlab函数
2、M文件中调用C语言函数   3。采用CreateProcess和FindWindows结合 4、采用Winmain代替Main 5、将输出改到Windows窗口上. 6、调用MATLAB引擎  7、VC++中调用Matlab  .m函数编译后的动态链接库
8、VC++中调用Matlab .m函数编译后的对应c函数
9、 运用matcom库

......

阅读全文(5298) | 评论:3

MixFiguredlg.cpp(2006-09-26 20:18:00)

摘要:// MixFigureDlg.cpp : implementation file //本程序尝试将MATLAB的Figure窗口嵌入到VC窗口中,//实现MATLAB窗口与VC 窗口的结合 #include "stdafx.h" #include "MixFigure.h" #include "MixFigureDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About //这里省略了部分通用代码.. ///////////////////////////////////////////////////////////////////////////// // CMixFigureDlg dialog CMixFigureDlg::CMixFigureDlg(CWnd* pParent /*=NULL*/) : CDialog(CMixFigureDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMixFigureDlg) m_A = 1.0f; m_Omega = 1.0f; m_Theta = 0.0f; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMixFigureDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP......

阅读全文(2797) | 评论:1