visual studio 开发 c++ 桌面软件核心三步:必须安装“使用 c++ 的桌面开发”工作负载(含 msvc、windows sdk、调试器等);新建项目时选“windows 桌面向导”而非空项目或控制台;编译前确认子系统为 windows、入口点为 winmaincrtstartup、字符集与预处理器定义匹配。

Visual Studio 开发 C++ 桌面软件,核心就三件事:装对组件、建对项目、编译能过。缺一不可,少一个环节就会卡在 LNK2019、C1083 或直接找不到 WinMain 入口。
必须勾选“使用 C++ 的桌面开发”工作负载
这不是可选项,是硬性前提。该工作负载包含:MSVC 编译器、Windows SDK(含 winuser.h、windef.h 等头文件)、调试器 和 资源编译器。如果只装了“通用桌面开发”或漏掉它,新建项目时会提示“未找到适用于 Windows 桌面的模板”,或者创建后连 CreateWindowExA 都标红。
补救方式很简单:运行 Visual Studio Installer → 选择已安装的 VS 实例 → “修改” → 勾选“使用 C++ 的桌面开发” → 安装。不需要重装整个 VS。
- 确认是否装好:打开 VS → 新建项目 → 搜索“Windows 桌面向导”,能出现即说明工作负载就位
- Windows SDK 版本默认随工作负载自动选最新稳定版(如 10.0.22621.0),不建议手动降级,除非目标系统老旧
- 若后续要用
CMake,还需额外勾选“CMake 工具”单个组件,否则cmake --version在开发者命令行里会报“不是内部或外部命令”
新建项目时选“Windows 桌面向导”,别选“空项目”
初学者常误以为“空项目”最干净,结果手动配 SubSystem、Entry Point、Unicode 字符集,半天跑不出窗口。而“Windows 桌面向导”自动生成符合 Win32 API 规范的结构,包括预编译头、资源文件夹、WinMain 框架和消息循环。
关键操作点:
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 项目类型选“Windows 桌面向导”,不是“控制台应用”或“动态链接库”
- 向导里务必勾选“Windows 应用程序”(而非“控制台应用程序”)
- “附加选项”中建议勾选“预编译头”和“ATL 支持”(即使不用 ATL,它能避免某些 MFC 相关头文件缺失报错)
- 生成的
main.cpp里默认用的是UNICODE宏,所以字符串要写成L"Hello",而不是"Hello";若想用窄字符,需在项目属性 → “常规” → “字符集”改为“使用多字节字符集”
编译前检查项目属性里的三项关键设置
很多“代码没改却突然编译失败”的问题,都出在这三个地方:
-
子系统(SubSystem):必须是
Windows (/SUBSYSTEM:WINDOWS),不是Console。否则链接时会报错LNK2019: 无法解析的外部符号 _main -
入口点(Entry Point):默认是
WinMainCRTStartup,对应WinMain函数签名。如果你自己写了int main(),就得手动改成mainCRTStartup并把子系统切回Console—— 但这不是桌面 GUI 程序的标准做法 -
预处理器定义:确保有
WIN32;_WINDOWS;,且UNICODE和_UNICODE成对存在(取决于字符集设置),否则CreateWindowEx等函数会因重载歧义而报错
这些设置路径统一为:右键项目 → “属性” → “链接器” → “系统”(子系统/入口点),“配置属性” → “常规”(字符集),“C/C++” → “预处理器”(预处理器定义)。
运行时报错“找不到 MSVCP140.dll”等运行时库问题
这是部署阶段最典型的坑:开发机有完整 VC++ 运行时,但目标机器没有。VS 默认用的是动态链接的 Multi-threaded DLL (/MD) 运行时,所以发布时得带上对应版本的 vcruntime140.dll、msvcp140.dll 等。
两种务实解法:
- 静态链接运行时:项目属性 → “C/C++” → “代码生成” → “运行时库”改为
/MT(Release)或/MTd(Debug)。缺点是 exe 体积变大,但免部署依赖 - 打包运行时安装包:从微软官网下载对应版本的
Microsoft Visual C++ Redistributable(如 VS 2022 对应 v143),让用户先装它。注意 x64 和 x86 必须严格匹配你的项目平台 - 千万别手动复制 dll 到 exe 同目录——Windows 不再允许这种“私有 DLL 加载”,尤其在 Win10 1809+ 上会被系统阻止
真正麻烦的从来不是写第一行 CreateWindowEx,而是让那个窗口在别人电脑上也弹出来。运行时库、SDK 版本、字符集、子系统这四样,任意一个不一致,都会让你卡在“本地能跑,换台机器就崩”。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










