Was schließt #defining WIN32_LEAN_AND_MEAN genau aus?

165

Ich fand die Erklärung, die WIN32_LEAN_AND_MEAN definiert, "reduziert die Größe der Win32-Header-Dateien, indem einige der weniger häufig verwendeten APIs ausgeschlossen werden". An anderer Stelle habe ich gelesen, dass dies den Erstellungsprozess beschleunigt.

Was schließt WIN32_LEAN_AND_MEAN genau aus? Sollte mich diese Vorprozessor-Direktive interessieren? Beschleunigt es den Erstellungsprozess?

Ich habe auch eine Präprozessor-Direktive in Projekten gesehen, die einen ähnlichen Namen haben. Ist dies eine weitere Beschwörung eines esoterischen Präprozessors, über die ich Bescheid wissen sollte?

Fischfutter
quelle

Antworten:

158

Direkt aus der Windows.h-Headerdatei:

#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 */

Wenn Sie wissen möchten, was die einzelnen Header tatsächlich tun, wird durch Eingabe der Headernamen in die Suche in der MSDN- Bibliothek normalerweise eine Liste der Funktionen in dieser Headerdatei erstellt.

Auch von der Microsoft-Support-Seite :

Um den Erstellungsprozess zu beschleunigen, bieten Visual C ++ und die Windows-Header die folgenden neuen Definitionen:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

Sie können sie verwenden, um die Größe der Win32-Headerdateien zu reduzieren.

Wenn Sie eine dieser Präprozessordefinitionen verwenden und etwas fehlt, das Sie benötigen, können Sie diese spezifische Header-Datei einfach selbst einfügen. Wenn Sie den Namen der Funktion, nach der Sie suchen, in MSDN eingeben, wird in der Regel unten auf der Seite ein Eintrag angezeigt, der angibt, welcher Header bei Verwendung verwendet werden soll.

Neugieriger George
quelle
140

Laut Windows Dev Center schließt WIN32_LEAN_AND_MEAN APIs wie Cryptography, DDE, RPC, Shell und Windows Sockets aus.

Chris911
quelle
30
Ich denke, dies ist die prägnante Antwort, nach der die meisten von uns gesucht haben.
Dave Voyles
3
@ DaveVoyles-MSFT und doch kratzt es nicht einmal die Oberfläche. Wenn Sie beispielsweise winsock2.hbesser verwenden möchten, stellen Sie sicher, dass WIN32_LEAN_AND_MEAN immer definiert ist, da sonst widersprüchliche Deklarationen zwischen den WinSock-Versionen angezeigt werden. Daher gefällt mir die andere Antwort besser, da hier fehlende Details hinzugefügt werden. Insbesondere zeigt es, was der tatsächliche Effekt dieser Definition ist. Beide Antworten sind Papageiendokumentation und die andere ist umfassender, obwohl beide die "Auswirkungen" der Nichtverwendung der Definition (WinSock-Namenskonflikte usw.) nicht erwähnen.
0xC0000022L