用dos窗口调试

分手后的思念是犯贱 2022-08-06 11:29 277阅读 0赞

http://blog.csdn.net/zhuqinglu/archive/2008/05/17/2454524.aspx

向MFC应用程序添加控制台窗口
简介
如果你曾经写过MFC应用程序,也许你忽略了控制台窗口。熟悉了控制台窗口的人会认为它是如此的便捷,我就是一个,认为printf或者cout是最优秀的调试函数,可以在不打开任务管理器的情况下在控制台中仅仅按下CTRL+C来结束不响应的程序。不幸的是,MFC应用程序默认情况下并不支持控制台。但是在你的应用程序加入一小段代码后,然后改变连接选项你就可以解决这个问题

l 对于Visual Studio .NET

l 对于 Visual Stduio 98 (Visual C++ 6.0)

l 它是如何工作的?

对于Visual Studio .NET
请根据下面的步骤做:

  1. 复制以下代码保存为”mfcconsole.cpp”,在Visual Studio .NET选择”Project”菜单的”Add Existing Item”,把”mfcconsole.cpp”加进来

#include “stdafx.h”

#include

#include

extern “C”

{

int PASCAL WinMain(HINSTANCE inst,HINSTANCE dumb,LPSTR param,int show);

};

int main(int ac,char *av[])

{

  1. char buf\[256\];
  2. int i;
  3. HINSTANCE inst;
  4. inst=(HINSTANCE)GetModuleHandle(NULL);
  5. buf\[0\]=0;
  6. for(i=1; i<ac; i++)
  7. \{
  8. strcat(buf,av\[i\]);
  9. strcat(buf," ");
  10. \}
  11. return WinMain(inst,NULL,buf,SW\_SHOWNORMAL);

}

  1. 有时不知什么原因vs不编译某些已包含的文件,这个时候,选择”Solution Explorer”属性页,然后右键单击”mfcconsole.cpp”文件选择”Property”,按下面的图解设置

2008517image001.png

  1. 在 “Solution Explorer” 属性页选择项目名字,右键属性,设置如下

2008517image003.png

编译一下看看效果o(∩_∩)o…,如果你想删除控制台,你只需要将上图的SubSystem恢复至/SUBSYSTEM:WINDOWS

对于 Visual Stduio 98 (Visual C++ 6.0)

Here’s how to add a printf-able console window to your MFC application.

  1. 同.net的(1)
  1. 右键单击mfcconsole.cpp文件,选择” Setting”,设置如下图:

2008517image005.png

  1. 在项目菜单中点击设置,设置如下图,将”/subsystem:windows”改为”/subsystem:console”

2008517image007.png

它是如何工作的
连接选项”/subsystem:*****“控制程序是否有一个控制台窗口,

l 如果是”/subsystem:console”:程序启动控制台,从main函数开始执行

l 如果是”/subsystem:windows”:不启动控制台,从WinMain开始执行

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhuqinglu/archive/2008/05/17/2454524.aspx

http://bbs.vrchina.net/viewthread.php?tid=3454&extra=page%3D16

去掉启动时dos窗口的简单方法[转]

看了osg自带的例子,它里面全是以main函数开头,这样程序运行时会先有一个dos窗口,这样在调试的时候非常方便,但在发布的时候不是很爽。
我们可以这样做:如果是debug时,我们使用dos窗口,是Release时直接使用windows的窗口,并不弹出dos窗口。

#ifdef _DEBUG
int main( int argc, char **argv )

#else if
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
#endif

注意,如果是release时,你还需要:在工程属性—〉…> 预处理器中把 _CONSOLE改为_WINDOWS;在 链接器—-〉System—-〉子系统 改为
Windows (/SUBSYSTEM:WINDOWS).

或者
#ifdef NDEBUG
#pragma comment(linker, “/entry:mainCRTStartup”)
#endif

这样
int main( int argc, char **argv )
就不用变了

你还需要:在release工程属性—〉…> 预处理器中把 _CONSOLE改为_WINDOWS;在 链接器—-〉System—-〉子系统 改为
Windows (/SUBSYSTEM:WINDOWS).

发表评论

表情:
评论列表 (有 0 条评论,277人围观)

还没有评论,来说两句吧...

相关阅读