【问题标题】:How to remove command line from a compiled program?如何从已编译的程序中删除命令行?
【发布时间】:2012-02-09 00:02:10
【问题描述】:

我最近开始学习如何使用 Windows API 编写 GUI 的教程,我遇到了一个意想不到的问题,我认为这有点愚蠢。我默认使用带有 OpenWatcom 编译器的 Code::Blocks,并且我创建了一个简单的 GUI 程序,可以很好地编译和链接。问题是当我尝试启动程序时,即使从发布版本开始,我的程序窗口后面也会显示命令行之类的东西,就像我试图通过 Code::Blocks 的编译和运行选项运行它一样。有什么办法可以去掉命令行的显示吗?

编辑:我的主要定义没有问题。这是我的主要定义:|

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)    

【问题讨论】:

    标签: winapi user-interface command-line codeblocks


    【解决方案1】:

    在 Windows 中,PE 可执行格式有一个标志,指示可执行模式是“控制台模式”还是“GUI 模式”。如果是“控制台模式”,那么操作系统会在程序运行时附加一个控制台窗口(必要时打开一个新窗口)。

    在您的构建环境中的某处将有一个链接器设置,用于控制您生成的 EXE 是标记为控制台还是 GUI。

    【讨论】:

    • Hegwill 我找到了该选项,尽管我更改了项目选项,以便发布文件是 GUI 应用程序而不是控制台应用程序,唯一的区别是现在当我通过构建环境运行程序时,“命令line”在我关闭窗口后立即关闭,而在此之前命令行只是等待击键关闭......仍然发布可执行文件具有相同的结果:/
    • 好的,如果您有dumpbin.exe 实用程序(或同等功能),请检查以确保可执行文件按照您希望的方式标记。
    • 抱歉,我现在没有可用的 Windows。要尝试的另一件事是创建一个以正确的 GUI 模式启动的 new 项目,并查看其行为是否正常。
    • 好的,试试另一个 IDE。我知道Visual C++ 2010 Express 肯定会这样做(而且它是免费的)。其中还包含dumpbin.exe,因此您可以了解您当前的工具链是否损坏。
    • 我找到了解决方案。如果您确实创建了一个新项目,并且在第一次链接之前立即将其更改为 GUI 应用程序,它确实会显示命令行,但是如果您选择在实际创建项目之前创建 Win32 GUI 应用程序,则命令行不会显示。感谢您的帮助。
    【解决方案2】:

    这由/SUBSYSTEM 链接器选项控制。当前设置为CONSOLE,您需要将其更改为WINDOWS。文档要求如何更改 main

    应用程序不需要控制台,可能是因为它创建 它自己的窗口用于与用户交互。如果 WinMainwWinMain 为本地代码定义,或 WinMain(HISTANCE *, HINSTANCE *, char *, int)wWinMain(HINSTANCE *, HINSTANCE *, wchar_t *, int) 是为托管代码定义的,WINDOWS 是默认的。

    专门针对Code::Blocks,可以通过this process更改链接器选项:

    在 Code::Blocks 中只需打开 Project->Properties 对话框,切换到 “构建目标”选项卡并更改构建目标的“类型” 要修改为“GUI 应用程序”或“控制台应用程序”。没必要 担心“主要”功能。

    【讨论】:

    • 正如我在上面对 Greg Hegwill 的评论所说的那样,我已经这样做了,重建项目但仍然发生同样的事情。
    【解决方案3】:

    你需要使用Win32的标准入口点WinMain,而不是main函数:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

    见:http://sol.gfxile.net/wintut/ch2.html

    或者,如果你不能重新编译,在 Windows 7 中你可以这样做:

    START myProgram {输入}

    见:http://support.microsoft.com/kb/126410

    【讨论】:

    • 已经这样做了。事实并非如此。也许主文件也不应该命名为 main.cpp 还是我错了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多