0
点赞
收藏
分享

微信扫一扫

Windows版本引起的问题_WIN32_WINNT not defined

今天你读书了吗 2022-02-08 阅读 82


MFC报错(我的情况:不使用预编译头,便没有这个报错):

1>_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)

1>_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)


解决方案:

在 stdafx.h中定义一个使用版本:

#define WINVER 0x0601


原因参考:

https://docs.microsoft.com/en-us/windows/win32/winprog/using-the-windows-headers?redirectedfrom=MSDN#setting-winver-or-_win32_winnt


摘录:

Macros for Conditional Declarations

Certain functions that depend on a particular version of Windows are declared using conditional code. This enables you to use the compiler to detect whether your application uses functions that are not supported on its target version(s) of Windows. To compile an application that uses these functions, you must define the appropriate macros. Otherwise, you will receive the C2065 error message.

The Windows header files use macros to indicate which versions of Windows support many programming elements. Therefore, you must define these macros to use new functionality introduced in each major operating system release. (Individual header files may use different macros; therefore, if compilation problems occur, check the header file that contains the definition for conditional definitions.) For more information, see SdkDdkVer.h.

The following table describes the preferred macros used in the Windows header files. If you define NTDDI_VERSION, you must also define _WIN32_WINNT.

Minimum system required

Value for NTDDI_VERSION

Windows 8.1

NTDDI_WINBLUE (0x06030000)

Windows 8

NTDDI_WIN8 (0x06020000)

Windows 7

NTDDI_WIN7 (0x06010000)

Windows Server 2008

NTDDI_WS08 (0x06000100)

Windows Vista with Service Pack 1 (SP1)

NTDDI_VISTASP1 (0x06000100)

Windows Vista

NTDDI_VISTA (0x06000000)

Windows Server 2003 with Service Pack 2 (SP2)

NTDDI_WS03SP2 (0x05020200)

Windows Server 2003 with Service Pack 1 (SP1)

NTDDI_WS03SP1 (0x05020100)

Windows Server 2003

NTDDI_WS03 (0x05020000)

Windows XP with Service Pack 3 (SP3)

NTDDI_WINXPSP3 (0x05010300)

Windows XP with Service Pack 2 (SP2)

NTDDI_WINXPSP2 (0x05010200)

Windows XP with Service Pack 1 (SP1)

NTDDI_WINXPSP1 (0x05010100)

Windows XP

NTDDI_WINXP (0x05010000)


The following tables describe other macros used in the Windows header files.

Minimum system required

Minimum value for _WIN32_WINNT and WINVER

Windows 8.1

_WIN32_WINNT_WINBLUE (0x0602)

Windows 8

_WIN32_WINNT_WIN8 (0x0602)

Windows 7

_WIN32_WINNT_WIN7 (0x0601)

Windows Server 2008

_WIN32_WINNT_WS08 (0x0600)

Windows Vista

_WIN32_WINNT_VISTA (0x0600)

Windows Server 2003 with SP1, Windows XP with SP2

_WIN32_WINNT_WS03 (0x0502)

Windows Server 2003, Windows XP

_WIN32_WINNT_WINXP (0x0501)


Minimum version required

Minimum value of _WIN32_IE

Internet Explorer 10.0

_WIN32_IE_IE100 (0x0A00)

Internet Explorer 9.0

_WIN32_IE_IE90 (0x0900)

Internet Explorer 8.0

_WIN32_IE_IE80 (0x0800)

Internet Explorer 7.0

_WIN32_IE_IE70 (0x0700)

Internet Explorer 6.0 SP2

_WIN32_IE_IE60SP2 (0x0603)

Internet Explorer 6.0 SP1

_WIN32_IE_IE60SP1 (0x0601)

Internet Explorer 6.0

_WIN32_IE_IE60 (0x0600)

Internet Explorer 5.5

_WIN32_IE_IE55 (0x0550)

Internet Explorer 5.01

_WIN32_IE_IE501 (0x0501)

Internet Explorer 5.0, 5.0a, 5.0b

_WIN32_IE_IE50 (0x0500)


Setting WINVER or _WIN32_WINNT

You can define these symbols by using the #define statement in each source file, or by specifying the /D compiler option supported by Visual C++.

For example, to set WINVER in your source file, use the following statement:

​#define WINVER 0x0502​

To set _WIN32_WINNT in your source file, use the following statement:

​#define _WIN32_WINNT 0x0502​

To set _WIN32_WINNT using the /D compiler option, use the following command:

cl -c /D_WIN32_WINNT=0x0502 source**.cpp**

For information on using the /D compiler option, see ​​/D (preprocessor definitions)​​.

Note that some features introduced in the latest version of Windows may be added to a service pack for a previous version of Windows. Therefore, to target a service pack, you may need to define _WIN32_WINNT with the value for the next major operating system release. For example, the ​​GetDllDirectory​​ function was introduced in Windows Server 2003 and is conditionally defined if _WIN32_WINNT is 0x0502 or greater. This function was also added to Windows XP with SP1. Therefore, if you were to define _WIN32_WINNT as 0x0501 to target Windows XP, you would miss features that are defined in Windows XP with SP1.


举报

相关推荐

0 条评论