书籍:《windows程序设计(第五版)》的开始->编写第一个WINDOWS程序
环境:visual studio 2022
内容:编写第一个WINDOWS程序
说明:以下内容大部分来自腾讯元宝。
问题:在学习wWinMain()
这个函数时,知道编译时需指定 /SUBSYSTEM:WINDOWS
,否则链接器可能选择 main
或 WinMain
作为入口点,在此了解更多的细节。(在visual studio 2022上新建项目时,会根据项目类型益精配置好了。)
在 Visual Studio 2022 中指定 /SUBSYSTEM:WINDOWS
需通过项目属性页的链接器配置实现,具体步骤如下:
一、操作步骤
-
打开项目属性页
右键点击解决方案资源管理器中的项目名称,选择 属性。 -
导航至链接器配置
在左侧导航栏依次展开 链接器(Linker) → 系统(System)。 -
设置子系统类型
在右侧配置项中找到 子系统(SubSystem),在下拉菜单中选择 Windows(对应/SUBSYSTEM:WINDOWS
)。 -
应用并保存配置
点击 应用 按钮,再点击 确定 保存设置。
二、关键配置说明
-
子系统作用
指定程序入口点类型:- Windows:需使用
WinMain
或wWinMain
作为入口函数,适用于 GUI 应用。 - 控制台:默认使用
main
或wmain
,适用于命令行程序。
- Windows:需使用
-
编译器行为
若未显式指定子系统,链接器会根据是否定义WinMain
或main
自动选择。强制指定/SUBSYSTEM:WINDOWS
可避免因隐式选择导致的编译错误。
三、验证配置
编译项目后,生成的 .exe
文件头部会包含 Subsystem: Windows
字段,可通过工具(如 dumpbin
)验证:
dumpbin /headers YourProgram.exe | findstr "Subsystem"
四、扩展场景
- 混合模式开发
若需同时支持控制台和 GUI,需通过FreeConsole
显式创建控制台窗口。 - 跨平台兼容性
使用 CMake 项目时,可在CMakeLists.txt
中添加:set_target_properties(TargetName PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
通过上述步骤,可确保程序以 Windows 子系统运行,适用于开发 Windows 原生 GUI 应用。