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

【推荐】去掉MATLAB编译产生的可执行图形界面程序运行时的DOS黑窗口的又一种方法

[复制链接]
发表于 2004-2-29 01:05:54 | 显示全部楼层 |阅读模式 来自 新加坡
这个问题最近讨论得比较多,我们也找出了几种方法,今天偶然又找到另外一种方法,经测试后发现可行,可能有人会感兴趣,所以贴在这里和大家分享。
  
这个方法从Windows平台可执行文件的头文件信息入手,强行修改可执行文件的执行方式,可以去掉那个黑窗口。这个方法可用在已经编译好的exe文件。当然,那些在黑窗口里出现的一些文本信息,比如程序运行出错的信息就看不见啦。
  
好了,入正题,原贴位置:
  
http://www.codeguru.com/Cpp/W-D/console/article.php/c3963/
  
下载那个project file后,解压缩可以得到一个ss.exe,执行后的界面如下,点open按钮后可以选择需要修改的exe文件

本帖子中包含更多资源

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

×
 楼主| 发表于 2004-2-29 01:07:23 | 显示全部楼层 来自 新加坡

回复: 【推荐】去掉MATLAB编译产生的可执行图形界面程序运行时的DOS黑窗口的又一

Simdroid开发平台
打开一个exe文件后,ss会自动分析这个exe文件的运行格式,一般上由matlab编译生成的exe属于Console:

本帖子中包含更多资源

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

×
 楼主| 发表于 2004-2-29 01:10:12 | 显示全部楼层 来自 新加坡

回复: 【推荐】去掉MATLAB编译产生的可执行图形界面程序运行时的DOS黑窗口的又一

要想去调那个黑窗口,选择GUI, 然后点OK, 这样就行啦,那个exe文件已经被修改,运行的话已经没有那个黑窗口啦。我在Windows xp Pro 上测试没有问题,大家可以试试在其它平台怎么样。

本帖子中包含更多资源

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

×
发表于 2006-5-2 00:17:23 | 显示全部楼层 来自 美国
这是我找到目前为止的第二好用的方法。非常感谢!
第一好用的当然是加
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
到 compopts.bat。 可惜我怎么试都不行!
原贴地址:
http://newsreader.mathworks.com/ ... cbRdJAW4.0@.ef2d66c
发表于 2006-5-2 00:25:55 | 显示全部楼层 来自 美国
另外问一句:自己更改生成的exe的图标,使用您的 mcc -m myapp01.m myapp.rc 方法,
可惜我没有装vc,怎么做一个.rc的文件呢?我用记事本写了一个,然后命名为 .rc
可是matlab 在编译时询问我,rc文件的打开方式,每次都失败了。能解决么?
你这大牛要是解决不了,估计是没办法了。
 楼主| 发表于 2006-5-2 21:00:49 | 显示全部楼层 来自 新加坡
原帖由 stripling 于 2006-5-2 00:17 发表
这是我找到目前为止的第二好用的方法。非常感谢!
第一好用的当然是加
set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
到 compopts.bat。 可惜我怎么试都不行!
原贴地址:
http:// ...


为什么说不行呢?我试过,这个方法是可行的。

不过我觉得这个方法有一个不爽的地方是,有时候我们的程序会在执行期间产生一些信息,通常会打印在黑色的DOS窗口中,可是这个方法不再有那个黑色的DOS窗口,所以也就看不见那些信息了。:(

另外问一句:自己更改生成的exe的图标,使用您的 mcc -m myapp01.m myapp.rc 方法,
可惜我没有装vc,怎么做一个.rc的文件呢?我用记事本写了一个,然后命名为 .rc
可是matlab 在编译时询问我,rc文件的打开方式,每次都失败了。能解决么?
。。。


rc文件本身就是个文本文件。vc的资源编译器会把它编译成资源文件.res,然后连接到程序代码共同产生最后的exe文件。你用什么编译器?应该说只要能编译Win32图形界面程序,应该就有办法生成.res文件。看看从这个角度出发,能否解决你的问题。
 楼主| 发表于 2006-5-2 21:06:28 | 显示全部楼层 来自 新加坡
原帖由 stripling 于 2006-5-2 00:25 发表
另外问一句:自己更改生成的exe的图标,使用您的 mcc -m myapp01.m myapp.rc 方法,
可惜我没有装vc,怎么做一个.rc的文件呢?我用记事本写了一个,然后命名为 .rc
可是matlab 在编译时询问我,rc文件的打开方式 ...


或者就是如你上一贴说的,修改compopts.bat,把编译生成的exe文件的subsystem改成GUI,然后从别处拷贝一个.res文件,在compopts.bat里设置成在最终产生exe文件时连接该.res文件。这样产生的exe文件就有了像普通Windows程序一样的资源了,然后再用ResourceHacker等工具把图标换成你自己的。这个方法我试过,是可行的,不过是罗索、笨拙了一点,呵呵:$
发表于 2006-5-2 23:32:47 | 显示全部楼层 来自 美国
我用的是matlab自带的lcc编译器,电脑上没有VC编译器。
我用 mcc -m myapp01.m myapp.rc 搞不定。主要是我的re文件是由写字板写的。

“修改compopts.bat,把编译生成的exe文件的subsystem改成GUI,然后从别处拷贝一个.res文件,在compopts.bat里设置成在最终产生exe文件时连接该.res文件”
能具体说是改compopts.bat 的那里么?

非常感谢!
发表于 2006-5-2 23:52:35 | 显示全部楼层 来自 美国
不能更改自己的icon也就罢了,毕竟我还是可以自建一个快捷方式连接到exe文件。笨一点而已!当然感谢taohe大侠的帮助。受益非浅!

更棘手的问题来了:怎么使自己编译的文件在没有matlab的机器上运行?
参考了好多种方法,但看起来答案都是一样的。
(1)安装<matlabroot>\toolbox\compiler\deploy\win32 下的MCRInstaller。(matlab7.0以上)。
参考:http://www.mathworks.com/access/ ... ler/f12-999353.html

(2)matlab一技术人员说的:only way to do this is to write all the math functions yourself and link your application against the resulting DLL,显然不现实。
参考:http://newsreader.mathworks.com/WebX?14@@.ef2e649

(3)也是目前发现最好的,既然程序运行的时候说找不到动态连接库,所以自然就想到打包这些需要的dll文件(MCRInstaller安装后要100多M空间,几十k的程序这样搞不现实)。问题是怎么知道需要哪些dll呢?
taohe 大侠:有什么办法一次搞定这些所需要的dll么,一次性打包到自己的exe文件里?
现在我正在试验,每天考一个dll到别的机器上去试,知道它不再说缺什么dll而已。最后也不知道有了这些dll之后能不能运行。
 楼主| 发表于 2006-5-3 21:40:48 | 显示全部楼层 来自 新加坡
看来你在使用matlab 7.x,关于编译后的程序的发布,比想象的简单很多。首先在matlab环境里看看buildmcr函数的帮助,然后记得需要发布的东东有三个:
1。编译后的代码(exe或者dll)
2。CTF文件
3。MCRInstaller.zip

一些值得注意的细节请翻阅拙作《深入浅出matlab 7.x混合编程》(机械工业出版社)第198-199页。
 楼主| 发表于 2006-5-3 21:47:22 | 显示全部楼层 来自 新加坡
原帖由 stripling 于 2006-5-2 23:52 发表
...
3)也是目前发现最好的,既然程序运行的时候说找不到动态连接库,所以自然就想到打包这些需要的dll文件(MCRInstaller安装后要100多M空间,几十k的程序这样搞不现实)。问题是怎么知道需要哪些dll呢? ...


据我所知,如果用matlab 7.x的话,安装MCR是必需的。如果真的只想发布短小精干的几十k的程序的话,好像只能像2)中所说得那样,全部自己写。
发表于 2008-7-21 20:20:56 | 显示全部楼层 来自 台湾

请问在Linux下,Compiler的问题

请问先进,我按照你的方法安装MCRInstaller.exe后,可以不用安装Matlab7.0以上,就直接在其他window系统执行C的执行档,那Linux环境下怎么设定呢?因为我看不太懂,Matlab网站的说明,先感谢你阅读。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-4 11:30 , Processed in 0.054760 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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