找回密码
 注册
Simdroid-非首页
楼主: SCIE

【原创】MATLAB与VC界面混合编程尝试

[复制链接]
 楼主| 发表于 2004-10-11 13:17:36 | 显示全部楼层 来自 天津

回复: 【原创】MATLAB与VC界面混合编程尝试

就是在matlab中通过设置fiugre窗口的  
WindowButtonDownFcn  
WindowButtonMotionFcn  
WindowButtonUpFcn  
三个属性,并在matlab中编写相应的回调函数来进行鼠标事件的响应。
发表于 2004-10-14 16:34:20 | 显示全部楼层 来自 陕西西安

回复: 回复: 【原创】MATLAB与VC界面混合编程尝试

Simdroid开发平台
SCIE wrote:
检查一下你的主程序文件名是否与Callback中设置的Enviroment_set一致,仔细比较一下。

  
这几天忙于其他事,没弄这个
今天又仔细弄了一下,还是不行
helei_99 该用户已被删除
发表于 2004-10-31 16:37:50 | 显示全部楼层 来自 黑龙江哈尔滨
提示: 作者被禁止或删除 内容自动屏蔽
helei_99 该用户已被删除
发表于 2004-10-31 16:40:45 | 显示全部楼层 来自 黑龙江哈尔滨
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-11-18 12:52:55 | 显示全部楼层 来自 北京东城

Re:【原创】MATLAB与VC界面混合编程尝试

强!在vb里怎么做?
 楼主| 发表于 2004-11-22 17:32:17 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

WaitingForMe wrote:
强!在vb里怎么做?
由于m文件编译后生成的是C或者C++代码,不能直接在VB里使用,所以需要先把这些代码封装到dll文件里再在VB里使用,这样很麻烦,得不偿失。
matlab8888 该用户已被删除
发表于 2004-11-23 21:56:37 | 显示全部楼层 来自 上海
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2004-11-24 08:10:15 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

MATLAB 7.0的编译器升级为4.0,而且与3.0的编译器从本质上发生了很大的变化,不再使用数学函数库和图形函数库,所以本帖所述内容不能在MATLAB7.0上应用。
psjnudt 该用户已被删除
发表于 2004-11-29 21:27:35 | 显示全部楼层 来自 湖南长沙
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2004-12-1 08:41:41 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

怎么会看不到呢?

******************************/
标题:实践经验:在VC中使用mcc编译得到的CPP文件
作者:SCIE
QQ: 826466
Email: miaocb@tom.com
发表位置: www.simwe.com Matlab版
您可以自由转发该帖,但不能删除该段,请保证文章的完整性
/******************************/

在本版中已经有好多篇帖子介绍如何在VC中使用由mcc命令编译得到的
cpp文件,但其中有几个版本是针对以前版本的matlab写的,已经不适应
于matlab6.5 或者连matlab6.1也不适应(由于目前没有安装matlab6.1,所
以不确定,有一个帖子好像还是针对matlab5.3写的,例如:在这些文章
中指明需要libmcc.lib,但在matlab6.5中已经没有这个文件,连libmcc.def
都没有)。在我根据这些帖子进行实际操作的过程中,发现如下由cwit转
帖的帖子
《总结:m文件转化为c/c++语言文件,VC编译》
http://www.simwe.com/cgi-bin/ut/topic_show.cgi?id=30318&h=1&bpg=1&age=0

内容是比较新的,我跟据该帖所述已经实验成功。但在该帖中仍有一些
问题,导致特定情况下的编译失败或者运行错误,我已经找到了解决方
法。

上面提到的那篇文章对于如何用mcc编译m文件,以及如何在VC中设置各
种选项已经说的比较清楚了,需要提醒大家注意的是:在第一次实验的
时候一定要严格按照文中描述的来做,且勿遗漏,最好保证完全一致。

下面说一下我在按照上文操作时遇到的问题及解决方案(我的操作是
在MFC AppWizard建立的Dialog Based程序的基础上进行的,其它类型
的可能会不同)。

1. Release 模式编译失败。
    文中提到要在project->Settings->Link->category 下拉框选
Input->对象/库模块中加入附录A中所列出的内容,在Release模式下
除添加以上内容外,还要添加msvcrtd.lib

2.文中指出在调用编译的matlab 函数前应添加:
   libmmfileInitialize();
    libmwsglmInitialize();
    mlfHGInitialize(NULL,NULL);
    在调用后应添加:
  mlfHGWaitForFiguresToDie();
    mlfHGTerminate();
    libmmfileTerminate();
    libmwsglmTerminate();
   这样做第一次会正确显示图形窗口,但关闭图形窗口后第二次再调用就
会出错。解决方法是把
    mlfHGTerminate();
    libmmfileTerminate();
    libmwsglmTerminate();
放到消息WM_DESTROY的相应函数OnDestroy里面去,或者其它在程序退
出时才会执行的地方,去掉mlfHGWaitForFiguresToDie();
再把
  libmmfileInitialize();
    libmwsglmInitialize();
   mlfHGInitialize(NULL,NULL);
放到OnInitDialog函数里去,或者其它能保证只运行一次的地方。

最后感谢《总结:m文件转化为c/c++语言文件,VC编译》的原文作者,
尽管连他的网名都不知道,感谢他把自己的经验写出来,我才能知道如
何去做。也感谢cwit,感谢他把这篇文章转过来,我才能看到。也希望以
后的转帖都能指明原作者及出处。

附例说明:
本例是在winXP + VC6.0 + Matlab6.5下编译通过,编译好的程序只要附带
mglinstaller.exe(在matlab的安装目录中)中的数学和图形库即可在没装
matlab的机器上运行。
发表于 2004-12-5 16:57:05 | 显示全部楼层 来自 河南新乡

请教

我已经试过了一些例子,但在VC环境下总是可以编译但.exe文件却不能执行!请问可能是什么问题,请指教!
我的实验之一是:在第一期上由苗春葆发表的《Matlab与VC混合编程》的MFC例子。
附件中是苗春葆发表的《Matlab与VC混合编程》的文章内容,也可在网上直接看到。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2004-12-6 08:21:24 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

请给出具体的错误信息。
dew_spring 该用户已被删除
发表于 2004-12-15 21:11:17 | 显示全部楼层 来自 上海松江区
提示: 作者被禁止或删除 内容自动屏蔽
windmark 该用户已被删除
发表于 2005-3-6 21:08:50 | 显示全部楼层 来自 北京理工大学
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-4-4 15:43:14 | 显示全部楼层 来自 江苏南京

Re:【原创】MATLAB与VC界面混合编程尝试

本人想请教大家个问题,我使用的是Matlab6.1,编译带plot函数的m文件一般会生成3个文件,即x.hpp;x.cpp;x_main.cpp; 如果在m文件中加了title(),xlabel()和ylabel()后,编译后又会多出这几个函数的.hpp和.cpp文件.当在vc中只调用一个画图函数没问题,但无法调用多个画图函数,况且这几个m文件编译后会生成同文件名的title,xlabel和ylabel的cpp文件,如果一起拷贝到vc工程目录下肯定会覆盖,我现在不知怎么办? 希望大家能帮个忙,谢谢!!
 楼主| 发表于 2005-4-4 17:33:48 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

绘制多个图形时要使用句柄来进行操作,否则容易引起绘图对象错乱。
xlabel,ylabel,title的功能可以用如下方式来实现:
hAxis = gca;
set(get(hAxis,'XLabel'),'String','X轴');
set(get(hAxis,'YLabel'),'String','Y轴');
set(get(hAxis,'Title'),'String','标题');
发表于 2005-4-5 09:51:56 | 显示全部楼层 来自 江苏南京

Re:【原创】MATLAB与VC界面混合编程尝试

谢谢SCIE兄的提点,但是还是有点不明白,我曾经用Matlab的GUI来做图形界面的时候使用过句柄,那时我为几个绘图的按钮分别写了事件响应函数,虽然由于自己水平有限,写的很笨拙,倒也能使用. 在vc中我也是想让每个按钮分别实现一种独立的绘图功能,即调用一次m文件.但在编译时,总是在Y_main.cpp处出错,提示如下:Y_main.obj : error LNK2005: _main already defined in X_main.obj
由于我用的6.1版本,在把m文件转为cpp文件时,无法使用mcc -B sglcpp x.m;
我直接使用mcc -lcpp x.m;这样就会生成_main.cpp,看了里面的程序只是一些简短的定义.罗里罗嗦说了一大堆,还是希望SCIE兄能再为小弟指导一下.
 楼主| 发表于 2005-4-5 17:20:30 | 显示全部楼层 来自 天津

Re:【原创】MATLAB与VC界面混合编程尝试

错误的原因是程序文件中多个main函数,这是不允许的。把源程序放到VC中编译的时候,不要把_main.cpp的那个文件加进去。
发表于 2005-4-6 09:18:44 | 显示全部楼层 来自 江苏南京

Re:【原创】MATLAB与VC界面混合编程尝试

SCIE兄,果然是这样,原来_main.cpp文件是不需要的,哈哈,终于弄清楚了,谢谢!!
发表于 2005-4-6 12:34:49 | 显示全部楼层 来自 山东威海

Re:【原创】MATLAB与VC界面混合编程尝试

该文件就是位于matlab安装目录中extern\lib\win32子目录中的mglarchive.exe。

为什么我没有mglarchive.exe呢,只有mglinstaller.exe。这个是runtime程序。是因为我没有安装某个组件吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 02:22 , Processed in 0.044940 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表