Windows 헤더 사용

Windows API의 헤더 파일을 사용하면 32비트 및 64비트 애플리케이션을 만들 수 있습니다. 여기에는 유니코드 및 ANSI 버전의 API 모두에 대한 선언이 포함됩니다. 자세한 내용은 Windows API의 유니코드를 참조하세요. 단일 소스 코드 베이스에서 애플리케이션의 32비트 및 64비트 버전을 모두 빌드할 수 있는 데이터 형식 을 사용합니다. 자세한 내용은 64비트 Windows 준비를 참조하세요. 추가 기능에는 헤더 주석 및STRICT 형식 검사가 포함됩니다.

Visual C++ 및 Windows 헤더 파일

Microsoft Visual C++ Visual C++가 릴리스될 당시의 Windows 헤더 파일 복사본이 포함되어 있습니다. 따라서 SDK에서 업데이트된 헤더 파일을 설치하는 경우 컴퓨터에 여러 버전의 Windows 헤더 파일이 포함될 수 있습니다. 최신 버전의 SDK 헤더 파일을 사용하고 있는지 확인하지 않으면 Visual C++가 릴리스된 후 도입된 기능을 사용하는 코드를 컴파일할 때 다음 오류 코드가 표시됩니다. 오류 C2065: 선언되지 않은 식별자입니다.

조건부 선언에 대한 매크로

특정 버전의 Windows에 의존하는 특정 함수는 조건부 코드를 사용하여 선언됩니다. 이렇게 하면 컴파일러를 사용하여 애플리케이션이 Windows의 대상 버전에서 지원되지 않는 함수를 사용하는지 여부를 감지할 수 있습니다. 이러한 함수를 사용하는 애플리케이션을 컴파일하려면 적절한 매크로를 정의해야 합니다. 그렇지 않으면 C2065 오류 메시지가 표시됩니다.

Windows 헤더 파일은 매크로를 사용하여 많은 프로그래밍 요소를 지원하는 Windows 버전을 나타냅니다. 따라서 각 주요 운영 체제 릴리스에 도입된 새로운 기능을 사용하려면 이러한 매크로를 정의해야 합니다. (개별 헤더 파일은 다른 매크로를 사용할 수 있으므로 컴파일 문제가 발생하는 경우 조건부 정의에 대한 정의가 포함된 헤더 파일을 검사. 자세한 내용은 SdkDdkVer.h를 참조하세요.

다음 표에서는 Windows 헤더 파일에 사용되는 기본 매크로에 대해 설명합니다. NTDDI_VERSION 정의하는 경우 _WIN32_WINNT 정의해야 합니다.

필요한 최소 시스템 NTDDI_VERSION 값
Windows 10 1903 "19H1" NTDDI_WIN10_19H1 (0x0A000007)
Windows 10 1809 "레드스톤 5" NTDDI_WIN10_RS5 (0x0A000006)
Windows 10 1803 "레드스톤 4" NTDDI_WIN10_RS4 (0x0A000005)
Windows 10 1709 "레드스톤 3" NTDDI_WIN10_RS3 (0x0A000004)
Windows 10 1703 "레드스톤 2" NTDDI_WIN10_RS2 (0x0A000003)
Windows 10 1607 "레드스톤 1" NTDDI_WIN10_RS1 (0x0A000002)
Windows 10 1511 "임계값 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "임계값" NTDDI_WIN10 (0x0A000000)
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
Windows Server 2008 NTDDI_WS08 (0x06000100)
Windows Vista 서비스 팩 1(SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 SP2(서비스 팩 2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 서비스 팩 1(SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP SP3(서비스 팩 3) NTDDI_WINXPSP3 (0x05010300)
Windows XP SP2(서비스 팩 2) NTDDI_WINXPSP2 (0x05010200)
Windows XP + 서비스 팩 1(SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

 

다음 표에서는 Windows 헤더 파일에 사용되는 다른 매크로에 대해 설명합니다.

필요한 최소 시스템 _WIN32_WINNT 및 WINVER의 최소값
Windows 10 _WIN32_WINNT_WIN10 (0x0A00)
Windows 8.1 _WIN32_WINNT_WINBLUE (0x0603)
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)

 

필요한 최소 버전 최소값 _WIN32_IE
인터넷 Explorer 11.0 _WIN32_IE_IE110 (0x0A00)
인터넷 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)
인터넷 Explorer 6.0 SP2 _WIN32_IE_IE60SP2 (0x0603)
인터넷 Explorer 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
인터넷 Explorer 5.01 _WIN32_IE_IE501 (0x0501)
인터넷 Explorer 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)

 

WINVER 또는 _WIN32_WINNT 설정

각 소스 파일에서 #define 문을 사용하거나 Visual C++에서 지원하는 /D 컴파일러 옵션을 지정하여 이러한 기호를 정의할 수 있습니다.

예를 들어 원본 파일에서 WINVER을 설정하려면 다음 문을 사용합니다.

#define WINVER 0x0502

원본 파일에서 _WIN32_WINNT 설정하려면 다음 문을 사용합니다.

#define _WIN32_WINNT 0x0502

/D 컴파일러 옵션을 사용하여 _WIN32_WINNT 설정하려면 다음 명령을 사용합니다.

cl -c /D_WIN32_WINNT=0x0502source.cpp

/D 컴파일러 옵션 사용에 대한 자세한 내용은 /D(전처리기 정의)를 참조하세요.

최신 버전의 Windows에 도입된 일부 기능은 이전 버전의 Windows용 서비스 팩에 추가될 수 있습니다. 따라서 서비스 팩을 대상으로 하려면 다음 주요 운영 체제 릴리스의 값으로 _WIN32_WINNT 정의해야 할 수 있습니다. 예를 들어 GetDllDirectory 함수는 Windows Server 2003에서 도입되었으며 _WIN32_WINNT 0x0502 이상인 경우 조건부로 정의됩니다. 이 함수는 SP1을 사용하여 Windows XP에도 추가되었습니다. 따라서 windows XP를 대상으로 하는 0x0501 _WIN32_WINNT 정의하려는 경우 WINDOWS XP SP1에 정의된 기능이 누락됩니다.

구조체 패킹 제어

가장 큰 정수 형식은 8바이트이므로 현재 8바이트인 기본 구조 압축을 사용하도록 프로젝트를 컴파일해야 합니다. 이렇게 하면 헤더 파일 내의 모든 구조체 형식이 Windows API에서 예상하는 것과 동일한 맞춤으로 애플리케이션으로 컴파일됩니다. 또한 8바이트 값이 있는 구조체가 제대로 정렬되고 데이터 정렬을 적용하는 프로세서에서 맞춤 오류가 발생하지 않도록 합니다.

자세한 내용은 /Zp(구조체 멤버 맞춤) 또는 팩을 참조 하세요.

더 작은 헤더 파일을 사용하여 더 빠른 빌드

다음과 같이 덜 일반적인 API 선언 중 일부를 제외하여 Windows 헤더 파일의 크기를 줄일 수 있습니다.

  • 암호화, DDE, RPC, 셸 및 Windows 소켓과 같은 API를 제외하도록 WIN32_LEAN_AND_MEAN 정의합니다.

    #define WIN32_LEAN_AND_MEAN

  • API를 제외할 NOAPI 기호를 하나 이상 정의합니다. 예를 들어 NOCOMM은 직렬 통신 API를 제외합니다. 지원 NOAPI 기호 목록은 Windows.h를 참조하세요.

    #define NOCOMM

Windows SDK 다운로드 사이트