培训
模块
为 Windows 开发项目选择最佳应用程序框架 - Training
Windows 开发人员有多种选项可用于创建在 Windows 上运行的应用程序。 本模块介绍了可用于 Windows 开发的 Windows UI 框架。 它还提供了有关如何为应用程序选择最佳框架的指导。
如果要构建适用于 Windows 10 的应用程序或驱动程序,则只需要阅读本部分。 如果使用的 Visual Studio 版本早于 Visual Studio 2015,请跳过此部分,并从阅读重新分发 C 运行时(适用于 Visual Studio 2015 之前的版本)开始学习。
如果一开始使用的是 Visual Studio 2015,通用 C 运行时 (UCRT)包含了 C 运行时。 一个完整程序所需的其他部分(C/C++ 语言功能、C++ 库)由 VC++ 可再分发程序包中的 Visual Studio 提供。 为避免运行时再分发要求,这些部分是通过静态方式链接的。
警告
在 Visual Studio 中构建用户模式驱动程序项目时,如果将 PlatformToolset 设置为 WindowsUserModeDriver10.0
,工具集会忽略项目中指定的任何运行时库,并针对 VC++ 运行时以静态方式链接,针对 UCRT 以动态方式链接。 使用此工具集时,无法重新配置此混合链接行为。
如果使用的不是 WindowsUserModeDriver10.0
工具集,则使用以下过程进行修改(例如,包含另一个 DLL):
备注
从现在起下面的所有信息仅适用于 2015 之前的版本。 在 2015 版之前,有两个独立的 C 运行时版本:Visual C++ 运行时(VCRT,例如 msvcr120.dll
)和旧版 WINDOWS CRT (msvcrt.dll
)。
Visual Studio 会将 VCRT 的最新版本安装到 System32
目录中。 如果文件不在此位置,可将其直接复制到 Visual C++ 项目的生成目录中。
如果用户模式驱动程序或桌面应用程序使用 VCRT,则必须分发相应的动态链接库。 使用 Visual C++ 可再发行程序包(VCRedist_x86.exe
、VCRedist_x64.exe
、VCRedist_arm.exe
)。 将可再发行程序包链接到其他二进制文件,可再发行程序包将接收自动更新。
如果要实现隔离或避免对 VC ++ 可再分发程序包的依赖,可以改为静态链接到 CRT。 虽然非驱动程序项目通常能够将特定的 Visual C/C++ DLL 复制到应用程序本地文件夹(应用程序安装位置),以避免依赖于 VC ++ 可再分发程序包,但应用程序本地部署不适合驱动程序。
请使用可再发行程序包,而不要将单个 CRT 组件复制到 System32
。 这可能导致不会自动为 CRT 提供服务,并且可能会覆盖它。
以下特别注意事项适用于打印机驱动程序:
以下示例说明了如何将 CRT 二进制文件包括到 INF 的 [COPY_FILES] 部分:
[COPY_FILES]
;CRT
Msvcr120.dll
; other files
* [SourceDisksFiles]
Msvcr120.dll = 2
; other files
* [SourceDisksNames.amd64]
1 = %Location%,,,
2 = %Location%,,,"amd64"
对于 UMDF 驱动程序:
若要确定必须为你的应用程序重新分发哪些 DLL,请收集你的应用程序所依赖的 DLL 的列表。 收集此列表的一种方法是运行依赖项查看器 (depends.exe
)。
有关详细信息,请参阅确定要重新分发的 DLL 和选择部署方法。
你无法重新分发 Visual Studio 中包括的所有文件;仅允许你重新分发 Visual Studio 2013 Preview and Visual Studio 2013 SDK Preview 的可再发行代码。 应用程序的调试版本和各个 Visual C++ 动态链接库不可以再分发。
以下库包含 C 运行时库功能:
术语 | 说明 |
---|---|
Msvcr120.dll | C 运行时 |
Msvcp120.dll | C++ 运行时 |
Msvcr120d.dll | C 运行时的调试版本 - 不允许再发行 |
Msvcp120d.dll | C++ 运行时的调试版本 - 不允许再发行 |
培训
模块
为 Windows 开发项目选择最佳应用程序框架 - Training
Windows 开发人员有多种选项可用于创建在 Windows 上运行的应用程序。 本模块介绍了可用于 Windows 开发的 Windows UI 框架。 它还提供了有关如何为应用程序选择最佳框架的指导。