2012-05-10 36 views
19

Todos los proyectos creados con MSVC tienen stdafx, que son encabezados precompilados, que sé lo que son pero ¿qué ocurre con targetver.h? Incluye SDKDDKVer.h, y no puedo encontrar de qué se trata ese encabezado.¿Para qué sirve SDKDDKVer.h?

¿Para qué es esto?

+0

Sobre todo se define '' _WIN32_WINNT' y WINVER'. Hace otras cosas, pero esa es su tarea más importante. –

Respuesta

10

targetver.h y SDKDDKVer.h se usan para controlar qué funciones, constantes, etc. se incluyen en su código de los encabezados de Windows, según el sistema operativo que desee que admita su programa. Creo que targetver.h establece de manera predeterminada el uso de la última versión de Windows a menos que las definiciones se especifiquen en otro lugar.

SDKDDKVer.h es el archivo de cabecera que realmente define la #defines que representan cada versión de Windows, Internet Explorer, etc.

+3

El archivo 'targetver.h' se genera automáticamente al crear el proyecto y solo incluye dos líneas:' #pragma una vez' y '#include ', así que básicamente no hace nada que no incluye SDKDDKVer.h por sí solo .. – d7samurai

+0

@ d7samurai bien, no hace nada por defecto, pero puede especificar la versión de destino en 'targetver.h', y se supone que debe hacer eso antes de llamar a' SDKDDKVer.h'. Es solo un archivo que te permite hacerlo. –

2

Línea 193 de la SDKDDKVer.h (en el SDK 8.1) afirma:

"si las versiones aren 't ya está definido, predeterminado a la mayoría actual "

Este comentario se refiere específicamente a las macros _WIN32_WINNT y NTDDI_VERSION.

Así que ..

  1. SDKDDKVer.h aplica los valores por defecto a menos que las macros ya se han definido
  2. el siguiente código se puede utilizar para definir explícitamente las macros
    • #define _WIN32_WINNT 0x0601
    • #define NTDDI_VERSION 0x06010000
  3. Curiosamente, el archivo de encabezado SDKDDKVer.h tiene valores 'constantes' definidos para todas las versiones de SDK. Por ejemplo:
    • #define _WIN32_WINNT_WINXP 0x0501
    • #define _WIN32_WINNT_WIN7 0x0601
    • #define _WIN32_WINNT_WIN8 0x0602
  4. Una convención es definir _WIN32_WINNT y NTDDI_VERSION en un fichero de cabecera llamado TargetVer.h, que haría referencia en su encabezado precompilado StdAfx.h.

LECTURA complementarias que

+0

¡Respuesta excelente y útil! Es una pena que esas constantes no estén disponibles antes de incluir ''. – Liviu