O que #defining WIN32_LEAN_AND_MEAN exclui exatamente?

165

Eu achei a explicação que define WIN32_LEAN_AND_MEAN "reduz o tamanho dos arquivos de cabeçalho do Win32 excluindo algumas das APIs usadas com menos frequência". Em outro lugar, li que isso acelera o processo de compilação.

Então, o que WIN32_LEAN_AND_MEAN exclui exatamente? Devo me preocupar com essa diretiva de pré-processador? Isso acelera o processo de compilação?

Também vi uma diretiva de pré-processador em projetos denominados algo como extra-lean. É este outro encantamento esotérico do pré-processador que eu deveria conhecer?

comida de peixe
fonte

Respostas:

158

Diretamente do arquivo de cabeçalho 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 */

se você quiser saber o que cada um dos cabeçalhos realmente faz, digitar os nomes dos cabeçalhos na pesquisa na biblioteca MSDN normalmente produzirá uma lista das funções desse arquivo de cabeçalho.

Além disso, na página de suporte da Microsoft :

Para acelerar o processo de criação, o Visual C ++ e os Cabeçalhos do Windows fornecem as seguintes novas definições:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

Você pode usá-los para reduzir o tamanho dos arquivos de cabeçalho do Win32.

Por fim, se você optar por usar qualquer um desses pré-processadores definidos, e algo que você precisar estiver faltando, poderá incluir apenas esse arquivo de cabeçalho específico. Digitar o nome da função que você procura no MSDN geralmente produzirá uma entrada que informará qual cabeçalho incluir, se você quiser usá-la, na parte inferior da página.

George curioso
fonte
140

De acordo com o Windows Dev Center, o WIN32_LEAN_AND_MEAN exclui APIs como criptografia, DDE, RPC, Shell e soquetes do Windows.

Chris911
fonte
30
Penso que esta é a resposta sucinta que a maioria de nós procurava.
Dave Voyles
3
@ DaveVoyles-MSFT e ainda nem arranha a superfície. Por exemplo, se você quiser usá- winsock2.hlo, verifique se WIN32_LEAN_AND_MEAN sempre está definido, pois, caso contrário, você obterá declarações conflitantes entre as versões do WinSock. Então, eu gosto mais da outra resposta, porque adiciona detalhes ausentes aqui. Notavelmente, mostra qual é o efeito real dessa definição. Ambas as respostas descrevem a documentação do papagaio e, no entanto, a outra é mais abrangente, embora ambas falhem em mencionar as "repercussões" de não usar o define (conflitos de nome do WinSock etc.).
0xC0000022L 20/04