¿Qué #defining WIN32_LEAN_AND_MEAN excluye exactamente?

165

Encontré que la explicación que define WIN32_LEAN_AND_MEAN "reduce el tamaño de los archivos de encabezado Win32 al excluir algunas de las API menos utilizadas". En otro lugar leí que acelera el proceso de compilación.

Entonces, ¿qué excluye exactamente WIN32_LEAN_AND_MEAN? ¿Debería preocuparme por esta directiva de preprocesador? ¿Acelera el proceso de construcción?

También he visto una directiva de preprocesador en proyectos con un nombre similar al de Lean extra. ¿Es este otro encantamiento esotérico de preprocesador que debería conocer?

comida para pez
fuente

Respuestas:

158

Directamente desde el archivo de encabezado Windows.h:

#ifndef WIN32_LEAN_AND_MEAN
    #include <cderr.h>
    #include <dde.h>
    #include <ddeml.h>
    #include <dlgs.h>
    #ifndef _MAC
        #include <lzexpand.h>
        #include <mmsystem.h>
        #include <nb30.h>
        #include <rpc.h>
    #endif
    #include <shellapi.h>
    #ifndef _MAC
        #include <winperf.h>
        #include <winsock.h>
    #endif
    #ifndef NOCRYPT
        #include <wincrypt.h>
        #include <winefs.h>
        #include <winscard.h>
    #endif

    #ifndef NOGDI
        #ifndef _MAC
            #include <winspool.h>
            #ifdef INC_OLE1
                #include <ole.h>
            #else
                #include <ole2.h>
            #endif /* !INC_OLE1 */
        #endif /* !MAC */
        #include <commdlg.h>
    #endif /* !NOGDI */
#endif /* WIN32_LEAN_AND_MEAN */

Si desea saber qué hace cada uno de los encabezados, escribir los nombres de encabezado en la búsqueda en la biblioteca de MSDN generalmente generará una lista de las funciones en ese archivo de encabezado.

Además, desde la página de soporte de Microsoft :

Para acelerar el proceso de compilación, Visual C ++ y los encabezados de Windows proporcionan las siguientes nuevas definiciones:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

Puede usarlos para reducir el tamaño de los archivos de encabezado Win32.

Finalmente, si elige usar cualquiera de estas definiciones de preprocesador, y falta algo que necesita, puede incluir ese archivo de encabezado específico usted mismo. Escribir el nombre de la función que está buscando en MSDN generalmente producirá una entrada que le indicará qué encabezado debe incluir si desea usarlo, en la parte inferior de la página.

Jorge el curioso
fuente
140

Según el Centro de desarrollo de Windows, WIN32_LEAN_AND_MEAN excluye API como Criptografía, DDE, RPC, Shell y Windows Sockets.

Chris911
fuente
30
Creo que esta es la respuesta sucinta que la mayoría de nosotros estábamos buscando.
Dave Voyles
3
@ DaveVoyles-MSFT y, sin embargo, ni siquiera rasca la superficie. Por ejemplo, si desea usarlo winsock2.hmejor, asegúrese de WIN32_LEAN_AND_MEAN que siempre esté definido porque, de lo contrario, obtendrá declaraciones contradictorias entre las versiones de WinSock. Así que me gusta más la otra respuesta, porque agrega detalles que faltan aquí. Cabe destacar que muestra cuál es el efecto real de esa definición. Ambas respuestas documentan el loro y, sin embargo, la otra es más completa, a pesar de que ambas no mencionan las "repercusiones" de no usar la definición (conflictos de nombres de WinSock, etc.).
0xC0000022L