找回密码
 注册
Simdroid-非首页
查看: 1245|回复: 19

[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

[复制链接]
发表于 2005-9-30 01:31:09 | 显示全部楼层 |阅读模式 来自 新疆乌鲁木齐
说实话,反回头一看,题目有点太大,姑且这样吧...:I问这个问题的原因是最近在学习混合编程的实例,卸掉7装了6.5,为了实现C++和MATLAB的交互操作,连续两天熬夜专门啃了SCIE和taohe的贴子(特别说明下看完去年SCIE,JUNZIYANG,CWIT,TAOHE讨论的有关去除编译后dos黑窗口等几篇文章后对几位彻底心悦诚服,尤其SCIE,taohe的很多相关与混编的文章现在还看不懂,留待今后继续努力琢磨)
我已经初步实现基于6.5环境,在C++中对自编的一个相对"复杂"的M文件的编译以及使用mcc来实现一些简单的exe文件,可是由于在7.0下混编的概念发生了质的变化,目前比较困惑,很难在"7.0能支持大多数工具箱函数的编译,不能提升速度及限制同C++语言等的交互"与"6.5与其他高级语言之间良好的交互性并拥有很好的速度优势却有较多函数无法编译"两者之间作出权衡(初学,也不知道我这样说对不对),比如刚才就遇到一个问题:mkdir命令C++无法支持编译(当然也很可能是我还没有找到窍门),在论坛看了很多有关的贴子,论坛里混合编程的超级高手也不乏其人,可是我始终迷惑混合编程的最终趋势是什么,这个讨论的好像也比较少.7.0中混编大刀阔斧的改动举措我在论坛中似乎并没有看到相应的追捧,大家还是对在6.5下与其他语言的交互、编译充满热情.对速度的高要求对图形界面的高要求可能是一个重要因素吧,我猜想...(当然,最近nostalgica和junziyang等讨论的JAVA与MATLAB的混编不在其列.)
哪位能给一点说明呢,谢谢.
BTW:有时我甚至想先装个双系统把两个版本都整上去(?)
======================================================================
上述部分不准确的语句作改动:
7.0的编译器4.0使用独立共享库MCR,而不是C/C++数学图形库,不支持mex文件和simulink的S函数,不包括针对visual studio的MATLAB插件.不加速程序的运行速度,且如taohe所说,不会再给整个M文件生成代码,只是生成接口函数的代码.

评分

1

查看全部评分

发表于 2005-9-30 07:08:23 | 显示全部楼层 来自 新加坡

Re:[请教]哪位高手能拨冗简单分析下MATLAB与其他应用程序语言接口的发展趋势

Simdroid开发平台
楼主精力相当充沛,让人佩服。

看到这个贴后,有点冲动,所以先抛块砖,希望有玉的赶紧扔过来:)

6.5以前的matlab在把m函数编译成c/c++文件时,是把m函数翻译成相应的c/c++源程序。其中的技术包含当初从Mathtools公司买进的matcom的技术。当时的技术思想,我想可能是从源程序级别直接翻译m函数到c/c++。这样做的好处可能是编译后可以获得速度提升,缺点可能是有技术难度,不能实现对所有m语言的翻译。

7.0及后来的版本中,matlab对m函数到c/c++的转换变成了只是产生特殊的接口文件,而m函数的功能实现仍然保持为m函数,所以编译后的代码在运行时需要特殊的环境来解释这些m函数。这样做的好处则是几乎可以编译所有的m函数。

我个人觉得7.x中使用的这种编译技术将会持续发展,也就是6.x及以前那种对m函数进行源代码翻译的技术可能不会出现。至少Mathworks公司可能不会继续支持。将来有可能会有第三方的编译工具出现。就像当年的matcom那样。

至于新版的编译器限制同C++的交互的说法可能不准确。因为我想Mathworks可能从能没有让人们那样做过,我们能在以前的matlab编译器产生的c++代码中作一些改动,以实现某些特殊的功能,可能并不是Mathworks期望的用法。而现在的编译器,只是强化了在这方面的规则而已。

如果想体验两个版本中的不同技术,你可以在同一台电脑上安装两个版本的matlab,并不需要双系统。

欢迎大家指正。:I

评分

1

查看全部评分

发表于 2005-9-30 20:20:55 | 显示全部楼层 来自 天津

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

再抛一块砖头吧。
我很喜欢matlab6.5所使用的编译方式,诚如taohe所说的,可以更改编译得到的C/C++代码,实现自己想要的东西。而我现在更喜欢的做法也正在做的就是直接调用matlab6.5的图形函数库,这样做既可以得到了matlab强大的图形显示功能,又脱离了matlab平台的限制。然而matlab7.0的编译器却不能实现我的想法,相信有很多人也和我一样希望编译器能继续沿着matlab6.5的方向发展,但是这与mathworks的想法不符。
我现在的机器上同时安装了matlab6.1,matlab6.5和matlab7.0三个版本,基本上没有冲突。
 楼主| 发表于 2005-9-30 20:46:04 | 显示全部楼层 来自 新疆乌鲁木齐

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

今天早上急着出去,草草翻开simwe发现这个贴没了,以为没写好,被alexqxp,bzzz等厮删了,中午回来才发现进置顶了:)

先为我前面贴中的错误道歉,说法的确有误,谢谢taohe.

这个帖子先回应taohe提到的最后一个问题,我中午看完这个"无需双系统即可安装两个版本"的提示后直奔实验室,在三台电脑上作了下尝试,证明双系统的确不必要,但也有问题,两个版本装到同一个系统中,对于6.5版本,不能在visual studio中对M文件作编译,出现错误,显示在这个贴子最下面,开始猜测是visual studio未完全安装,全部组件都安装后问题依旧,是mlib文件的问题,卸载7.0,6.5下的编译就一切正常,再怀疑与安装次序有关,再次安装7.0,编译又出现问题,因此想先问这个问题,有没有办法在两个版本装在同一个系统下让visual studio正常编译M文件?
=====================================================================
进入VC后,编译M文件出现错误:
This is the output from running MATLAB Add-in.
Please close this window after viewing it.
--------------MCC/MEX BEGIN---------------
mcc -k "D:\MATLAB6.5.1\WORK\C++ COMPILE FILES\fffff\mcc.mak" -/n -B sgl -A line:on -g libmmfile.mlib libmwsglm.mlib -vh  "D:\MATLAB6.5.1\work\Shell_K_assemble\重写平面刚架有限元程序\测试数据程序\K_jifen.m"

  To get started, type one of these: helpwin, helpdesk, or demo.
  For product information, visit www.mathworks.com.

The -A switch is no longer supported; all error messages now report file name
and line number.

The -h switch is no longer supported; the MATLAB Compiler detects M-file
dependencies automatically. But see also the documentation for the -a switch.
mlib file libmmfile.mlib: error opening file: No such file or directory
--------------MCC/MEX DONE----------------
==========================================================================
在MATLAB6.5环境下用mcc编译成功后运行exe文件出现错误:
"无法定位程序输入点mxGetRegisterInternalFcnsFcn于动态链接库libmx.dll上."
==========================================================================
上述两个问题在系统只有6.5环境时候均不存在.先想问下能否通过一些调整来fix上述的错误呢?我的错误是否是我用红色高亮的这部分呢,这是我想问的问题之一.其他的在后面接着再说吧:)

本帖子中包含更多资源

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

×
 楼主| 发表于 2005-9-30 22:20:13 | 显示全部楼层 来自 新疆乌鲁木齐

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

刚吃完饭,才发现scie大大也发了贴...:)
其实我最想问的是:在一定的专业范围内,MATLAB的接口与编译能否在现有基础上更进一步地提高易用性?确切地说,是会在6.5的这种方向上发生?抑或是会在7.0现在mathworks坚持的这种编译思路上发生?还是会如taohe所说出现第三方编译软件与MATHWORKS分道扬镳?我只是初学,实在不是一个对这个问题作出什么判断的合适人选.只是困惑同一个软件实现同一个目标竟然出现了那么多的方式!你里面调用我,我里面调用你,mcc,mex,各种三方手段matrixVB,matcom...乍一接触这个领域的用户,估计都要有个"晕晕乎乎"的预产期吧,我想...
老实说,对于混编我一直在看论坛的贴子,书,资料,教程也搞了一堆却一直没有开始学,就因为我在观望,就因为想看看目前花样繁多的编译方式究竟有没有"六王毕,四海一"的趋势,会不会有天,有某个方式将会发展得或者有可能发展得如同office在文字处理,windows在pc操作系统,MATLAB在数值计算软件中一样,成为众望所归的王者?当然仍然会有另类存在,(例如latex,wps或者linux)这样说也许不准确,但非本主题重点故请勿拍砖.我个人是更愿意接受scie和taohe大大所提及的那种方式——在C++中使用MATLAB的graphic library和math library,因为感觉上这样更顺畅些,利用两种软件的优势进行互补从道理上也是理所当然的(这一点是从置顶贴中学习和体会到的)
软件的使用群是由用户组成的,如果他们不接受,开发者再努力也是枉费,所以很想听听各位的意见.其实我这样问是有私心的,真的希望有一天MATLAB的编译手段会象office一样,其主要的那部分功能会让用户(这里的用户是有所指的,并不是门口看门的张大爷,又或者街边卖桔子的李大妈)在不知不觉中就学会,容错性更好,兼容性更强,初始化方式更直接了当,当然了,最理想的情况是能让有一定语言基础的用户没有感觉到在"学习"编译,自己都莫名其妙,可有一天就会了...并非不想下苦功,而是不由得你去下苦功...
以上只是作为普通用户胡乱发表的一点非常简陋的想法,偏颇错漏之处勿怪:)
发表于 2005-9-30 22:58:09 | 显示全部楼层 来自 新加坡

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

SCIE兄提到了在7.0之前有关matlab编译器的一个很重要的技术特点,而我再上一帖中忘记提了:I,那就是MATLAB C++数学库和图形库。这两个库给开发人员带来了很大的方便。人们甚至可以在C++程序中直接使用这两个库。不过,我觉得Mathworks并不推荐这样的做法。

从一开始,人们进行matlab和其他编程语言的混合编程所希望达到的目的大概不外乎以下三种:提高程序的运行速度、提高程序的开发速度、或者使得最终的程序更加易于发布和部署。

直接hack翻译后的c/c++源代码,或者直接在程序中使用matlab c++图形库等,可能需要开发者具有更高的编程技术,增加编程难度,可能有悖于初衷。

混合编程中的一个重要问题就是如何在自己的程序中有效地使用matlab的图形功能,比如如何把matlab的图形窗口嵌入到自己的GUI。关于这个问题,SCIE已经给我们展示了一个直接修改matlab编译后的c/c++代码,或者直接使用matlab c++图形库的巧妙方法。可惜这些方法不能适用于matlab 7.x。

不过,我们可能通过其他的一些变通手段达到类似的目的。我在即将出版的新书中介绍了两三种另类的方法,实现把matlab的图形嵌入到自己的C++程序中。这些方法都比较简单,无需更改编译后的c++代码。其中一些方法还可以结合wxWidgets适用于跨平台图形界面程序的开发。在书中我给出了Windows和Linux上的例子。所以这样看来,matlab 7给我们的新功能并不是太坏。

至于bainhome的问题,你看看系统路径的设置,可能matlab 7的路径在matlab 6.5.1之前。如果是的话,把顺序改一下再试试。或者,在使用matlab 6.5.1时,把matlab 7的目录名先暂时改名。
 楼主| 发表于 2005-10-2 02:09:28 | 显示全部楼层 来自 新疆乌鲁木齐

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

谢谢taohe的意见,这两天实验室不开门,大假后去试试...
昨天写了一些东西,真实地证明了自己现在浮躁懒惰的状态,为了能够求证我在主题中的困惑,这两天我翻阅了不少书的第一章,包括java,C,VB...因为一直相信语言是相通的,很多机理之间存在联系和映照,所以囫囵吞枣似懂非懂的往脑子里填了些东西,直到今天晚上刚看了台湾候捷的深入浅出MFC一书的第一章:"勿在浮砂筑高台",才真的感觉非常惭愧:

"从来不曾学习过在事件驱动系统中撰写以事件为基础之应用程式者,能否一步跨入MFC领域内,直接以application framework开发windows程式,我一直报怀疑态度,虽然有了MFC,你可以继承一整组类别,从而快速得到一组颇具规模的程式,但是windows程式的运作本质——message basiced,event driven从来不曾也不会改变,如果你不能了解其髓,空有其皮其肉或其骨,是不可能有所精进的,即使能够操控wizard,充其量却也只是个puppet,对于手上的程式码,没有自主权"

"很多相关书籍或文章尝试以各种方式简化windows程式的第一步,因为单单一个hello程式就要上百行,怕把大家吓坏了,我却宁愿各位尽早接受正统写法,早一点看到全貌,因为windows东西又多又杂,早一点一窥全貌是很有必要的...经过有条理的解释之后,程式码的多寡其实构不成什么威胁,否则无字天书最适合程式员阅读..."

虽然候捷是针对mfc的编程人员所说的这些话,但个人却听得格外受刺激,感觉仅仅停留在"一句C代码不写就在VC环境中可以编译M程序"的成就感和兴奋中,助长的懒惰可能甚至对进一步的研究混编还是有害处的,我就先下功夫作点homework,再回头向各位请教,这个算是开头吧,谢谢taohe和scie两位的点拨提醒,我对混编先做多点了解之后再回来继续请教...:)
发表于 2005-10-2 10:46:04 | 显示全部楼层 来自 浙江舟山

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

taohe兄,你的大作什么时候出版呢,我很想知道你的把matlab图像嵌入到自己的GUI的其它方法,可不可以先大概透露一下思路呢?等您的大作出版之后一定要买来研究研究。
发表于 2005-10-2 20:29:15 | 显示全部楼层 来自 新加坡

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

书稿已经完成,现在出版社正在处理。希望能快出来。

基本思路是:
1。通过Windows剪切板。在m程序中产生一个不可见matlab图形窗口,把图形拷贝到剪切板,然后在Win32应用程序中粘贴该图形。
2。图过图形文件。在m程序中产生一个不可见matlab图形窗口,把图形打印到一个图形文件,然后在win32应用程序中绘制该图形。
3。直接把matlab图形窗口re-parent,也就是把matlab图形窗口取掉title bar等一些元素,然后作为子窗口,把它挪到win32应用程序窗口。这个技术思路已经有人讨论过了(或者你已经在这个论坛讨论过了?我有点记不得了)。
发表于 2005-10-3 15:55:43 | 显示全部楼层 来自 浙江舟山

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

感谢taohe兄的分享。

1. 拷贝figure窗口的图形,我曾经试过,不过很遗憾没有成功,我无法拷贝一个隐藏窗口的图形。
2. 将figure窗口的图形保存为图形文件,保存为jpg的话,图形会跟显示的不一致。也许保存为tif或者emf可以,但我没有试。
3.第三种方式有一个比1,2两种方式明显很优越的地方,就是reparent的这个matlab的窗口,仍然可以支持回调函数,可以响应键盘、鼠标事件,这样就可以与用户进行交互了。
4.另外我还尝试用hook api的方式,截获matlab程序调用的绘图API函数,然后将其转接到自己的GUI上,可惜只做到了一半。

   最后有一个令我困扰的问题,前不久发现的。在VC中,如果你同时使用了ActiveX控件和Matlab的图形库,当在figure窗口上按下键盘按键(可显示字符按键,非控制键)时,程序会占用100%的CPU资源,致使程序无法正常运行。这不能不说是一个很大的缺憾,如果能解决的话就是很完美的了。

   我说的这些已经脱离楼主要讨论的混编的发展方向问题了,但我可能更关注技术细节,再者我认为天下一统并不利于技术的发展和进步,而且mathwors已经在尽量做的最好,增强易用性了。不下一点苦功,不费一点力气就掌握有一定难度的东西是不太可能的,即使会用了也很难深入下去,这一点cwit兄在《我与matlab这三年》中阐述的非常清楚,也非常精彩。

编译问题应该就是“环境变量”path的设置问题,看一下系统环境变量的path和用户变量的path是不是同时有matlab7.0和matlab6.5的路径在里面。用哪个版本的时候就让哪个路径有效,可以改一下某个的安装目录,使其与环境变量中的设置不一致就可以了,这个办法taohe兄前面的帖子提到了。由于2000、XP等每个用户都有自己的用户变量,所以我的系统有三个用户,他们的其中一个差别在于用户环境变量path不同,它们分别指向matlab6.1,matlab6.5和matlab7.0的路径,用哪个版本的matlab就切换到相应的用户,也许你会觉得麻烦,那么就用前面的方法好了。

另:《深入浅出MFC》不愧为一本非常好的书,获益斐浅。
发表于 2005-10-3 18:27:54 | 显示全部楼层 来自 上海

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

各位的讨论很精彩!
我更倾向于matlab的6.5版本以前的完全编译,这样可以支持matlab程序的大规模应用!如果能够直接与mathworks的工程师沟通,也许可以有其他解决办法!
发表于 2006-3-2 22:51:21 | 显示全部楼层 来自 上海杨浦区

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

今天又看了一遍各位的讨论,很精彩!
最近对比了一个国外竞争对手的产品。他们的数据库虽然支持的不是很好,但是因此带来的易用性却比我们高一截。不知道有没有兄弟,探讨Matlab与数据库的结合开发程序的问题?
谢谢!
 楼主| 发表于 2006-3-2 23:38:19 | 显示全部楼层 来自 新疆乌鲁木齐

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

SCIE wrote:
..l
编译问题应该就是“环境变量”path的设置问题,看一下系统环境变量的path和用户变量的path是不是同时有matlab7.0和matlab6.5的路径在里面。用哪个版本的时候就让哪个路径有效,可以改一下某个的安装目录,使其与环境变量中的设置不一致就可以了
...
此言今日看来已更有体会,并不是具体这个问题的解决,而是为什么要如此解决,这个问题的回答才最重要。
其实同样的问题原来VZHANG曾经回答过我,当时只是解决问题,并未深想,最近抽时间看了看Java初始环境变量的设置,感觉才有豁然开朗的意思,看来还有更多的工作需做,毕业之后有事情干了:D。
to cwit:
数据库不懂,纯支持一下老大。见过MATLAB和spss接口,是把spss作为纯客户端程序调用,可将之看作为一个COM组件,数据库和MATLAB接口应当不外于此罢。另外如果要是做混编就干脆做彻底点儿,就在VS下做算了,数据库的话CRYSTOL REPORT、SQL貌似就是干这个行当的。只把MATLAB作为数值计算程序使用也OK。
胡说,勿怪...:)
俺这才真真正正叫抛砖,上面各位抛的不叫砖。
发表于 2006-3-6 22:55:30 | 显示全部楼层 来自 陕西西安

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

bainhome技艺越见精湛了,跟不上了啊。。

《深入浅出MFC》我也在看,感觉真是复杂。尤其是document/view。。。
先不说了实验室关门了。
发表于 2006-3-7 16:26:35 | 显示全部楼层 来自 湖南长沙

Re:[请教]简单分析下MATLAB与其他应用程序语言接口的发展趋势

我期待可以和你们一起热烈讨论的那一天
发表于 2006-5-9 21:22:45 | 显示全部楼层 来自 上海松江区
偷偷的顶一下!
发表于 2006-5-14 23:05:11 | 显示全部楼层 来自 上海杨浦区
关于matlab未来的发展方向,究竟会有什么变化呢?
有一些迷惑!
发表于 2006-5-15 12:11:46 | 显示全部楼层 来自 广东深圳
7.0以上的不好用,还是习惯6.5的。打包后的安装文件也小!
发表于 2006-5-21 15:15:22 | 显示全部楼层 来自 河南新乡
To C_dinco:您提到“打包后的安装文件也小!”,我对打包不是很精通,打包的文件一般有30M以上,请问您如何实现打包后的安装文件,请赐教!谢谢!
e-mail: dgsm2003@yahoo.com.cn
发表于 2006-5-21 19:19:12 | 显示全部楼层 来自 湖北武汉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-23 23:33 , Processed in 0.079939 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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