当前位置:  开发笔记 > 编程语言 > 正文

创建没有窗口的应用程序

如何解决《创建没有窗口的应用程序》经验,为你挑选了2个好方法。

如何编写可以在不打开窗口或控制台的情况下运行的C/C++应用程序?



1> computinglif..:

编写WinMain程序时,会自动将/ SUBSYSTEM选项作为编译器中的窗口.(假设您使用Visual Studio).对于任何其他编译器,可能存在类似的选项,但标志名称可能不同.

这会导致编译器以可执行文件格式(PE格式)创建一个条目,将可执行文件标记为Windows可执行文件.

一旦此信息出现在可执行文件中,启动程序的系统加载程序会将您的二进制文件视为Windows可执行文件而不是控制台程序,因此它不会导致控制台窗口在运行时自动打开.

但是Windows程序如果不需要就不需要创建任何窗口,就像你在任务栏中看到的那些程序和服务一样,但是没有看到任何相应的窗口.如果您创建一个窗口但是选择不显示它,也会发生这种情况.

所有你需要做的就是实现这一切,

#include 

int WinMain(HINSTANCE hInstance,
            HINSTANCE hPrevInstance, 
            LPTSTR    lpCmdLine, 
            int       cmdShow)
    {
    /* do your stuff here. If you return from this function the program ends */
    }

您需要WinMain本身的原因是,一旦您将子系统标记为Windows,链接器就会假定您的入口点函数(在程序加载和C Run TIme库初始化后调用)将是WinMain而不是main.如果您未在此类程序中提供WinMain,则在链接过程中将出现未解决的符号错误.


不应该是int WINAPI WinMain(...)?

2> Brian R. Bon..:

在Windows中:

#include 

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // <-- Program logic here
    return 0;
}   

请务必使用Adam Mitz提到的/ SUBSYSTEM链接器开关.

在其他平台上:

int main(int argc, char**argv)
{
  // <-- Program logic here
  return 0;
}


@Brian - 如果没有指定返回值,main()默认返回0.这是一个疯狂的特殊情况,仅适用于main().
你想回归0,所以你可以表示调用它的程序的成功.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有