Mr.C64
Mr.C64

Reputation: 43044

How to use Visual Studio 2019 to target Windows 7?

I would like to use Visual Studio 2019 to enjoy the latest C++ additions, but targeting Windows 7.

I created a Windows C++ application using the VS 2019 wizard (running on Windows 10).

A targetver.h file is created by the wizard, with the following content:

#pragma once

// // Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>

I followed the instructions in the comment lines, and added the following lines intargetver.h (before the #include <SDKDDKVer.h> line):

// Target Windows 7 SP1
#include <WinSDKVer.h>
#define _WIN32_WINNT 0x0601

To test that, in the program's main function I invoked an API (PathCchAppend) that is not supported in Windows 7.

The program builds fine (I statically link the CRT), and runs fine in Windows 10.

The same program fails when executed in Windows 7, showing the following error message:

Error message when trying to run the VS 2019 C++ application on Windows 7

Now, the program should have not compiled at all, because I specified the Windows 7 target, and the aforementioned API is not available on Windows 7.

Is this a bug in the Windows SDK?

Is it possible to target Windows 7 using VS 2019 and the Windows 10 SDK, getting errors during the build process when an API or structure that is not supported in Windows 7 is used in the code, and how?

Upvotes: 4

Views: 5663

Answers (1)

Chuck Walbourn
Chuck Walbourn

Reputation: 41137

VS 2019's toolset and the latest Windows 10 SDK support targeting Windows 7 Service Pack 1.

You have already configured the Windows headers in the Windows 10 SDK properly:

#include <winsdkver.h>
#define _WIN32_WINNT 0x0601
#include <sdkddkver.h>

You can still call APIs that are not supported by Windows 7 in this mode, which is why calling PathCchAppend builds, links, and fails at runtime.

The problem you are seeing may also be related to the Universal C/C++ Runtime not being on your target machine. Install the x86 and/or x64 native version on your target test machine.

See Microsoft Docs.

Upvotes: 2

Related Questions