This update includes support for targeting Windows XP with the Visual C++ 2012 toolset and CRT. This provides C++11 Language and Standard Library support for Win32 desktop applications compatible with the legacy Windows XP platform. This is accomplished through using the Platform Toolset "v110_xp". Details on this were announced for the CTP.
See KB 2797915
Compiler and CRT
VS 2012 Update 1 includes a new version of the compiler (17.00.51106) and C/C++ Runtime (11.0.51106).
MSDN downloads has the updated retail redistribution packages which are now compatible with Windows XP Service Pack 3.
Windows SDK and Windows XP
First be sure to read this blog post by the Visual Studio team. When building applications that support the legacy Windows XP platform, you are using a platform header and library set similar to those that shipped in the Windows 7.1 SDK rather than the Windows 8.x SDK with the integrated DirectX SDK content (see Where is the DirectX SDK?). Many of the "DirectX" headers and libraries are included with these Windows XP compatible platform headers (see DirectX SDKs of a certain age) such as Direct3D 9, DirectSound, and DirectInput. You will, however, need to continue to use the legacy DirectX SDK for Windows XP compatible versions of the D3DCompile API (#43), legacy D3DX9, XAUDIO2, XINPUT, and PIX for Windows tool (the Visual Studio 2012 Graphics Debugger does not support Direct3D 9 applications).
Windows SDK 7.1A is installed as part of VS 2012 Update 1 for use with the "v110_xp" Platform Toolset, which contains the headers, libraries, and a subset of the tools that originally shipped in the Windows SDK 7.1. There are older Direct3D 10 and Direct3D 11 headers as part of this 7.1 era toolset which are outdated compared to the Windows 8.x SDK versions using the standard "v110" Platform Toolset, particularly the SDK Debug Layers installed by the Windows 8.0 SDK on Windows 7 and Windows 8. The Platform Toolset "v110_xp" is therefore not recommended for developing DirectX 11 applications, but it can technically be done with some caution. Windows SDK 7.1A does not contain a
dxguid.lib so must either locally define the required GUIDs in your project by using
#define INITGUID in one of your .cpp files, or use the legacy DirectX SDK version.
This also means that the 'search path order' guidance for "v110_xp" is different than the Windows 8.x SDK recommendations on MSDN. For "v110_xp" you should use the legacy order:
For "v110" if you are using legacy DirectX SDK components for an EXE that does not support Windows XP:
_WIN32_WINNT: When building an application that is 'down-level' when using headers in the Windows 8.x SDK, be sure to explicitly select the correct 'minimum' _WIN32_WINNT value. For Windows 8, that is 0x0602 (which is the default when building code with Visual Studio 2012 and for all Windows Store apps). For Windows 7 use 0x0601, and for Windows Vista use 0x0600. When using "v110_xp" set it to
0x0502 (the Visual C++ REDIST requires Windows XP Service Pack 3). Typically this is done as part of the project configuration via Preprocessor Definitions. See Using the Windows Headers for more information.
Note: The Direct3D 9 Developer Runtime is only available on Windows 7 or older versions of the OS using the legacy DirectX SDK. Direct3D 9 debugging is not supported for Windows 8.x or Windows 10.
Windows Server: Targeting Window Server 2003 or Windows Server 2003 R2 also requires the use of "v110_xp".
VS 2013: This information also applies to Visual C++ 2013's "v120_xp" platform target.
VS 2015: This information also applies to Visual C++ 2015's "v140_xp" platform target. Note that a number of warnings are generated in system headers when using the older SDK with the newer compiler. You will need to select the optional component Windows XP Support for C++ in the custom install.
VS 2017: This information also applies to Visual C++ 2017's "v141_xp" platform target. Note that a number of warnings are generated in system headers when using the older SDK with the newer compiler, and you won't be able to make use of
/permissive-. You will need to install additional optional component Windows XP Support for C++ (
Microsoft.VisualStudio.ComponentGroup.NativeDesktop.WinXP) in the installer.
DirectXMath and Windows XP
DirectXMath in the Windows 8.x SDK is compatible with Windows XP, but the "v110_xp" Platform Toolset include paths will not find it. You can make use XNAMath 2.05 for your Windows XP configurations, or you can make a copy of the DirectXMath headers in the project for Windows XP configurations--DirectXMath can also obtained directly from GitHub.
Microsoft::WRL::ComPtr and Windows XP
A similar issue to the one with DirectXMath arises when using the ComPtr smart-pointer: the "v110_xp" Platform Toolset include paths will not find
wrl\client.h. You can use ATL's CComPtr instead when targeting Windows XP, but remember that
operator& with ATL's
CComPtr maps to
GetAddressOf() while the same operator with
Microsoft::WRL::ComPtr maps to
This update includes Code Analysis
/analyze support for Windows phone 8 applications (i.e. when using the Platform Toolset "v110_wp80")
Note that the Platform Toolset "v110_xp" does not support Code Analysis
/analyze which is disabled due to incompatibilities with the Windows SDK 7.1A headers.