Using the Windows Headers

MFC 2016. 6. 29. 16:07

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 requiredValue for NTDDI_VERSION
Windows 8.1NTDDI_WINBLUE (0x06030000)
Windows 8NTDDI_WIN8 (0x06020000)
Windows 7NTDDI_WIN7 (0x06010000)
Windows Server 2008NTDDI_WS08 (0x06000100)
Windows Vista with Service Pack 1 (SP1)NTDDI_VISTASP1 (0x06000100)
Windows VistaNTDDI_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 2003NTDDI_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 XPNTDDI_WINXP (0x05010000)

 

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

Minimum system requiredMinimum 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 requiredMinimum 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.

Controlling Structure Packing

Projects should be compiled to use the default structure packing, which is currently 8 bytes because the largest integral type is 8 bytes. Doing so ensures that all structure types within the header files are compiled into the application with the same alignment the Windows API expects. It also ensures that structures with 8-byte values are properly aligned and will not cause alignment faults on processors that enforce data alignment.

For more information, see /Zp (struct member alignment) or pack.

Faster Builds with Smaller Header Files

You can reduce the size of the Windows header files by excluding some of the less common API declarations as follows:

  • Define WIN32_LEAN_AND_MEAN to exclude APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets.

    #define WIN32_LEAN_AND_MEAN

  • Define one or more of the NOapi symbols to exclude the API. For example, NOCOMM excludes the serial communication API. For a list of support NOapi symbols, see Windows.h.

    #define NOCOMM


'MFC' 카테고리의 다른 글

occcont.cpp Line: 926  (0) 2019.09.13
MFC에서 DDK 사용 시  (0) 2018.03.26
COM9 보다 큰 직렬 포트를 지정  (0) 2016.06.07
Serial Communications  (0) 2016.06.07
FormatMessage function  (0) 2016.06.07
Posted by 곰돌이짱
,