taohe 发表于 2004-2-22 21:46:18

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

写在前面的话:
最近论坛上原创气氛比较高,大家都纷纷拿出自己的看家本领,或者如饥似渴地学习新东西以解决大家在实际使用matlab时遇到的一些棘手问题。我个人觉得这是一个以技术性讨论为主的论坛健康发展所应该看到的现象。这种现象对大家都是有益的,无论是发贴的,还是看贴的,都会获得一些收获。对于我来说,把自己的业余时间花在浏览这样的论坛以及参与其中的讨论,我不会后悔。网络上论坛不少,但是有特色的不多,而且注重技术讨论的论坛更少,希望大家继续保持这样的热情,希望simwe变得更好。

正文:
最近论坛的一个问题是如何去掉在MATLAB李编译生成的可知行文件在运行的时候所产生的那个黑色的窗口。这种现象主要是指在Windows平台。比如在附图中出现的左边那个黑色背景的窗口。在这个例子里,可知行文件名为:myapp01.exe,它是从MATLAB程序myapp01.m编译得到的。在MATLAB里,myapp01.m是一个简单的GUI程序,界面上有两个按钮和一个图形。

如何在MATLAB里编译这里不讨论,得到那个myapp01.exe以后,如果运行的话,就会出现如附图所示的黑色窗口。关于如何去掉那个黑色窗口,现在来说MathWorks公司还没有什么好的办法。民间流传着几种方法:比如,这里的SCIE同学提出的修改MATLAB在编译该可知行文件的过程中所产生的C/C++原文件的方式已达到去掉那个黑色窗口的方法。另外,在MathWorks的网站也有人提出用免费的工具NSIS来制作另外一个可执行文件,它可以启动我们的可执行文件比如myapp01.exe,但不会出现那个黑色的窗口。

其实,如果只是简单的取出那个黑色窗口可能并不是件好事,因为那个窗口有时也显示一些有用的信息,比如程序运行时产生的一些错误信息,或者程序也可以利用它来产生一些运行当中的信息(用disp()函数)。

我在这里提供另外一种方法,就是用事先写好的一个软件,来运行由MATLAB编译生成的可执行文件比如myapp01.exe。myapp01.exe在运行当中所产生的一些信息也可以在这个loader软件里被捕捉并显示。

taohe 发表于 2004-2-22 21:50:00

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

所需文件在附件中,其中包括

1。WgLoader.exe ---- 启动程序,可运行于Windows NT/2000/XP,但可能无法运行在Windows 98/Me. 解压到任何路径都行

2. myapp01.zip ---- MATLAB所编译得到的可执行文件和必要的支持文件,解压到任何路径都行。

taohe 发表于 2004-2-22 21:51:41

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

WgLoader运行后的界面如下:图中有使用说明。

taohe 发表于 2004-2-22 21:52:59

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

比如,我把myapp01.exe解压缩到c:\temp目录,那么WgLoader可以这样设定,

taohe 发表于 2004-2-22 21:55:05

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

启动myapp01以后,可以点选“Start”按钮,结果可以得到一个简单的图形。

taohe 发表于 2004-2-22 21:57:48

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

听cwit说过,MATLAB的legend函数在编译后会有问题,我以前没有注意到这个问题,所以在myapp01里专门加了一个legend调用,不过编译以后没有发现问题,而且编译后的legend的操作也正常,比如可以用鼠标拖拉到别的地方。

taohe 发表于 2004-2-22 21:58:46

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

贴完啦:I

QQLewis 发表于 2004-2-22 22:17:02

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

太感谢你们了,真是高手!顺便问一句啊,我怎么运行的时候那个capture output 显示是capture outpu,也就是说少了一个"t",不知道咋回事?看着不太爽!
还有,虽然楼主说在这里不讨论怎么编译的,我还是想问,你的那个exe文件是不是没有经过VC编译啊,如果没有经过VC编译的话文件不算大嘛,在我的机子里面可以直接运行,并不需要那些很多很多的库文件,怎么回事呢?

taohe 发表于 2004-2-22 22:40:28

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

关于第一个问题,我改了一下,你再下载一次试试看。可能是以为你的电脑显示分辨率比较低。

是经过编译的,在matlab利用如下命令:

mcc -B sglcpp myapp01


在你的机子里可以直接运行,可能是因为你的机子可能已经装了matlab,否则,无法运行。

cwit 发表于 2004-2-23 12:04:09

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

关于legend的编译问题,如果你直接编译到这个exe里面,确实是没有问题的。如果你的程序很多,而legend编译到一个dll文件中,使用时肯定要出问题的。我遇到的是特殊情况,不可一概而论,都怪我没有讲清楚。
真的很感谢taohe兄的贡献和分享,不愧是simwe的栋梁啊!加油哦!

snow_man_0 发表于 2004-3-23 21:28:52

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

今天在mathworks.com看到的这个问题

http://newsreader.mathworks.com/WebX?50@198.0sQdaj18jPa.0@.eed3ae0

另外把这个贴上,
用免费的工具NSIS来制作另外一个可执行文件
改test.exe成你的exe文件名就可以了,另外.bat的也行

niuniu1234 发表于 2004-4-15 23:56:34

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

对于一般的应用,没有必要如此苛求

水之渊 发表于 2004-4-17 15:42:35

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

果然是高手哦,你帮我解决了一个期待了一年的问题。

yaqing99 发表于 2004-9-11 10:52:00

bainhome 发表于 2005-8-7 15:38:44

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

删掉了几个垃圾贴,然后再把它顶出来,算是对我刚入simwe时(直到现在也是)最为敬仰的高手之一taohe的一种致敬,篇首几句话现在看来真的很鼓励,同时也很惭愧...
同时真诚祝贺你...(原因省略...:D)担子更重了^_^

qipp1150 发表于 2006-8-25 21:23:55

landwonder 发表于 2006-10-12 01:41:29

It is a standard bug of matlab family

Check this out

http://www.mathworks.com/support/bugreports/details.html?rp=217007

Summary    How do I keep the DOS window from appearing when launching a MATLAB stand-alone program?
Report ID    217007
Date Last Modified    31 Jul 2006
Product    MATLAB® Compiler
Exists In Version    2.2, 3.0, 3.0.1, 4.0, 4.0.1, 4.1, 4.1.1, 4.2, 4.3, 4.4, 4.5
Exists In Release    * Prior to R13, R13, R13SP1, R13SP2, R14, R14+, R14SP1, R14SP1+, R14SP2, R14SP3, R2006a, R2006b
Fixed In Version   OPEN
Fixed In Release   OPEN


Summary
How do I keep the DOS window from appearing when launching a MATLAB stand-alone program?

Description
The standalone applications created using MATLAB Compiler always bring up a DOS window when executed by double clicking on them. Is there a way to suppress this DOS window.

Workaround
Currently, you can only create console applications using MATLAB Compiler. We are considering an enhancement to create a Windows application for a future release. You can try the following workaround to suppress the DOS window from appearing for a console application.

(Note: this solution has not been fully tested by the MathWorks and is not officially supported.)

1. Create a batchfile (for example, start.bat) containing one line that launches your program (for example, myprog.exe)
2. Create a shortcut to start.bat
3. Set


Run: Minimized
in the Properties\Shortcut pane of the shortcut

Another way to accomplish this is by adding the following line to your options file before you compile:

If you have chosen the LCC compiler at 'mbuild -setup':


set LINKFLAGS=%LINKFLAGS% -subsystem windows
If you have chosen the Microsoft Visual C/C++ compiler at 'mbuild -setup':

set LINKFLAGS=%LINKFLAGS% /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
If you have chosen the Borland compiler at 'mbuild -setup':

set LINKFLAGS=%LINKFLAGS% -aa
If you do not have this line, the system defaults to building a console application.

You may edit your options file by typing the evaluating the following sequence of MATLAB commands:

cd(prefdir)
edit compopts.bat

The above steps may cause undesirable or application-fatal behavior if your application generates any output that would otherwise be displayed in the console window.

luzhutangtang 发表于 2010-11-30 21:04:03

一直遇到这个问题得不到解决,来看高手的优化

momentnow 发表于 2012-3-12 14:43:42

以前也总是遇到这个问题,也没想过把它去掉,不过去掉之后确实舒服点啊!

rocwoods 发表于 2012-3-12 18:02:41

momentnow 发表于 2012-3-12 14:43 static/image/common/back.gif
以前也总是遇到这个问题,也没想过把它去掉,不过去掉之后确实舒服点啊! ...

现在新版本的MATLAB可以通过下列命令去掉dos黑窗,同时函数运行的信息或者如果出错后的错误信息会显示在logfile.txt里,这样既解决了美观问题同时也能查看函数运行信息。mcc -e -R '-logfile,logfile.txt' -v yourfunction.m;
页: [1]
查看完整版本: 【原创】去掉MATLAB编译产生的可执行图形界面程序运行时的DOS黑窗口的一种方法