如何阻止命令提示符出现在Win32 C应用程序中?

时间:2009-06-08 06:27:10

标签: c winapi command-prompt

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

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

#define DEBUG

在main.c中,

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

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

当我unde'd DEBUG时,窗口仍然出现......我不知道我在做什么来实现它,有什么样的东西导致命令提示窗口出现在win32应用程序中?我尝试使用所有****Ex()窗口函数而不仅仅是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开关工作,谢谢

3 个答案:

答案 0 :(得分:6)

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

你的程序也应该像这样读取主要方法:

int WINAPI WinMain(
....
)

与传统的int main()相反。

相关主题:

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

不知道你正在使用什么编译器,但我知道GCC需要-mwindows选项来禁止命令行窗口。