从头开始创建 C++ 后台 Win32 应用程序

Posted

技术标签:

【中文标题】从头开始创建 C++ 后台 Win32 应用程序【英文标题】:Create C++ background Win32 application from scratch 【发布时间】:2016-12-31 03:12:26 【问题描述】:

我想创建一个非常简单的后台应用程序。 我从空的 c++ 项目开始,然后使用以下代码创建一个 source.cpp 文件:

#include "Windows.h"

int WINAPI _tWinMain(HINSTANCE  hInstance,
    HINSTANCE   hPrevInstance,
    LPTSTR      lpCmdLine,
    int     nCmdShow)

    MSG Msg;

    while (GetMessage(&Msg, NULL, 0, 0))
    

    

    return 0;

然后我将项目的设置设置如下:

属性 -> 配置属性 -> 链接器 -> 系统:设置子系统为:Windows (/SUBSYSTEM:WINDOWS)

属性->配置属性->链接器->高级->设置入口点是:_tWinMain

我做得对吗?另外我想将MFC库添加到这个项目中,这样我就可以使用MFC的功能了,我该怎么做呢?

感谢阅读:)

编辑: 奇怪的是,我只需要包含“tchar.h”并且错误[LNK1561:必须定义入口点]消失。我不再需要配置项目设置。我只需要下面的代码:

#include "Windows.h"
#include "tchar.h"

int WINAPI _tWinMain(HINSTANCE  hInstance,
    HINSTANCE   hPrevInstance,
    LPTSTR      lpCmdLine,
    int     nCmdShow)

    //MessageBox(0, _T("test"), _T("Test"), 0);

    return 0;

【问题讨论】:

我想从头开始,这样我就可以完全理解 Windows 进程是如何运行的。 不要摆弄入口点。将其保留为默认值。如果您将其设置为_tWinMain,您将跳过必需 CRT 启动代码。这包括具有静态存储持续时间的对象的初始化程序等。如果您想了解 Windows 进程的工作原理,请阅读一本书(如 Russinovich 的 Windows Internals)。无论您做什么,都不要添加 MFC。这将使它更难理解,发生了什么。更何况,如果您不精通 C++、Windows API 或 MFC。 如果我不配置入口点,项目将无法构建,它会显示错误:必须定义入口点,所以我这样做:***.com/questions/17070367/… 恐怕您应用了错误的解决方案。我对您链接到的评分最高的答案发表了评论(并投票)。 @IInspectable:非常感谢,我会深入研究这个话题。 【参考方案1】:

在不使用文档和视图的情况下创建 SDI 应用程序。仅检查您需要的选项。在大多数情况下,即使是后台应用程序也需要一个窗口来获取窗口消息。

离开创建的主窗口并且不显示它,将 m_nCmdShow 设置为 SW_HIDE。销毁此主窗口将结束消息循环并停止程序。

稍后您可以从主机中删除其他未使用的东西,例如工具栏。

另一种方法是使用向导创建一个基于对话框的应用程序。无需创建任何对话框并使用您自己的消息泵。像这样:

while (OuterCondition()) 

  while( ::PeekMessage( &message, NULL , WM_MIN, WM_MAX, PM_NOREMOVE ) )
  
    ::AfxPumpMessage();
  

MsgWaitForMultipleObjects 也可能有用。

您通常需要一个 CWinApp 对象来正确初始化 MFC。

【讨论】:

OP 可能错误地标记了这个问题。这与 MFC 无关,而是一个直接的 Windows API 问题。

以上是关于从头开始创建 C++ 后台 Win32 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何避免阻塞(C++、Win32)

如何在 Win32 上开始使用 C++ 编程?

从头开始创建 Visual C++ MFC 项目时如何添加图像?

C++ 编写一个WIN32程序,向CMD传递参数

(Visual Studio 2015) 无法创建 Win32 C++ 应用程序

成功创建c ++类和对象[重复]