Apa yang tidak ditentukan oleh #definisikan WIN32_LEAN_AND_MEAN?

165

Saya menemukan penjelasan yang mendefinisikan WIN32_LEAN_AND_MEAN "mengurangi ukuran file header Win32 dengan mengecualikan beberapa API yang jarang digunakan". Di tempat lain saya membaca bahwa itu mempercepat proses pembangunan.

Jadi, apa sebenarnya yang tidak termasuk dalam WIN32_LEAN_AND_MEAN? Haruskah saya peduli dengan arahan pra-prosesor ini? Apakah itu mempercepat proses pembangunan?

Saya juga melihat arahan preprocessor dalam proyek yang bernama sesuatu di sepanjang garis lean ekstra. Apakah ini mantra preprocessor esoterik lain yang harus saya ketahui?

makanan ikan
sumber

Jawaban:

158

Langsung dari file header 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 */

jika Anda ingin tahu apa yang sebenarnya dilakukan masing-masing header, mengetikkan nama header ke dalam pencarian di perpustakaan MSDN biasanya akan menghasilkan daftar fungsi dalam file header itu.

Juga, dari halaman dukungan Microsoft :

Untuk mempercepat proses pembuatan, Visual C ++ dan Windows Headers memberikan definisi baru berikut:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

Anda dapat menggunakannya untuk mengurangi ukuran file header Win32.

Akhirnya, jika Anda memilih untuk menggunakan salah satu dari definisi preprocessor ini, dan sesuatu yang Anda butuhkan hilang, Anda bisa memasukkan sendiri file header tertentu itu. Mengetik nama fungsi yang Anda cari di MSDN biasanya akan menghasilkan entri yang akan memberi tahu Anda header mana yang harus dimasukkan jika Anda ingin menggunakannya, di bagian bawah halaman.

George yang penasaran
sumber
140

Menurut Pusat Pengembangan Windows WIN32_LEAN_AND_MEAN tidak termasuk API seperti Kriptografi, DDE, RPC, Shell, dan Soket Windows.

Chris911
sumber
30
Saya pikir ini adalah jawaban singkat yang sebagian besar dari kita cari.
Dave Voyles
3
@ DaveVoyles-MSFT dan bahkan tidak menggores permukaan. Misalnya jika Anda ingin menggunakan winsock2.hAnda lebih baik pastikan WIN32_LEAN_AND_MEAN selalu ditentukan karena jika tidak, Anda akan mendapatkan deklarasi yang bertentangan antara versi WinSock. Jadi saya suka jawaban yang lain lebih baik, karena menambahkan detail yang hilang di sini. Khususnya itu menunjukkan apa efek sebenarnya dari definisi itu. Keduanya menjawab dokumentasi burung beo dan yang lainnya lebih komprehensif, meskipun keduanya gagal menyebutkan "dampak" dari tidak menggunakan define (WinSock name clash dll).
0xC0000022L