【问题标题】:How do I stop a command prompt from appearing in a Win32 C application?如何阻止命令提示符出现在 Win32 C 应用程序中?
【发布时间】:2010-11-01 02:36:27
【问题描述】:

我真的不知道为什么会这样...... 我在 emacs 中创建了一个 win32 应用程序,每当我创建并运行它(不是通过命令提示符)时,窗口下都会弹出一个命令提示符窗口。如果我在 Code::Blocks 中构建一个 win32 应用程序,并且只运行它的默认模板,那么它会在没有命令提示符窗口的情况下运行。我查看了两者的代码,无法弄清楚可能导致这种情况的原因......

我认为是因为我在其中包含了一些 printf() 语句,但我不希望它们留在那里(它们用于调试),所以我写了一个宏:

#define DEBUG

在 main.c 中,并且

#ifdef DEBUG
#include<stdio.h>
#define DBG printf
#else
#define DBG
#endif

在标题中(当然包括在#define DEBUG 之后)。

当我取消 DEBUG 的定义时,窗口仍然出现...我不知道我在做什么来实现它,是什么导致命令提示符窗口出现在 win32 应用程序中?我尝试使用所有****Ex() windows 函数,而不仅仅是CreateWindow() 等,但这并没有改变任何东西。我检查并重新检查了类定义和注册,但无济于事,并确保我没有忘记 printf() 语句(即使我这样做也会导致错误,因为 stdio.h 不包括在内,除非DEBUG 已定义)。

这是我包含的:

#include<windows.h>
#include<windowsx.h>
#include"main.h"
#include"windowproc.h"

有人知道是什么原因造成的吗?我什至注释掉了我所有的 stdio、DBG、printf 垃圾,它仍然出现,我发誓我的代码和 Code::Blocks 生成的代码之间没有区别,除了我使用 HANDLE_MSG 和一些额外的功能拆分代码。

更新

我正在使用 MinGW 3.4.5。 使用 -mwindows 开关有效,谢谢

【问题讨论】:

    标签: c winapi command-prompt


    【解决方案1】:

    尝试使用 -mwindows 开关进行链接。

    你的程序也应该有这样的 main 方法:

    int WINAPI WinMain(
    ....
    )
    

    相对于传统的 int main()。

    相关主题:

    【讨论】:

      【解决方案2】:

      Windows 在“控制台”和“Windows”应用程序之间有所区别。控制台应用程序将始终与关联的终端一起运行。

      有关差异的详细信息,请参阅this question

      【讨论】:

        【解决方案3】:

        不知道您使用的是什么编译器,但我知道 GCC 需要 -mwindows 选项来抑制命令行窗口。

        【讨论】:

          猜你喜欢
          • 2011-04-30
          • 2014-04-10
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          • 2017-02-26
          • 2016-04-05
          • 2013-06-17
          相关资源
          最近更新 更多