windows # defining WIN32_LEAN_AND_MEAN究竟排除了什么?

b4lqfgs4  于 2022-12-19  发布在  Windows
关注(0)|答案(4)|浏览(173)

我找到了定义WIN32_LEAN_AND_MEAN * 的解释“通过排除一些不常用的API来减少Win32头文件的大小”*。
那么WIN32_LEAN_AND_MEAN到底排除了什么呢?我应该关心这个预处理器指令吗?它能加速构建过程吗?
我还在一些项目中看到过一个预处理指令,它的名字类似于extra lean,这是另一个我应该知道的深奥的预处理咒语吗?

xmd2e60i

xmd2e60i1#

根据Windows Dev Center,WIN32_LEAN_AND_MEAN不包括加密、DDE、RPC、Shell和Windows套接字等API。

chhqkbe1

chhqkbe12#

直接从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 */

如果您想知道每个头文件实际上做什么,那么在MSDN库的搜索中键入头文件名通常会生成该头文件中的函数列表。
此外,从Microsoft's support page
为了加快生成过程,Visual C++和Windows标头提供了以下新定义:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

可以使用它们来减小Win32头文件的大小。
最后,如果你选择使用这些预处理器定义中的任何一个,而你需要的东西丢失了,你可以自己包含特定的头文件。在MSDN中输入你要查找的函数的名称通常会在页面底部产生一个条目,告诉你如果你想使用它,应该包含哪个头文件。

bgtovc5b

bgtovc5b3#

作为对上述答案以及Windows Dev Center文档中“鹦鹉学舌”的补充,
Winsock2.h头文件内部包含Windows. h头文件中的核心元素,因此在Winsock应用程序中Windows. h头文件通常没有#include行。如果Windows. h头文件需要#include行,则应在其前面加上#define WIN32_LEAN_AND_MEAN宏。由于历史原因,Windows. h头文件默认包含Windows套接字1.1的Winsock. h头文件。Winsock. h头文件中的声明将与Windows套接字2.0所需的Winsock2.h头文件中的声明冲突。WIN32_LEAN_AND_MEAN宏防止Windows. h标头中包含Winsock. h。

kzipqqlq

kzipqqlq4#

这里有一个很好的答案的动机,从雷蒙德陈的博客:https://devblogs.microsoft.com/oldnewthing/20091130-00/?p=15863
...定义WIN32_LEAN_AND_MEAN将您带回到16位Windows的理念,即编写基本Windows程序时使用最小的头文件集。这安抚了那些喜欢对头文件进行微观管理的程序员,这是一个很大的帮助,因为在引入该符号时,预编译头文件并不常用。我记得,在50MHz 80486和8MB内存上,切换到WIN32_LEAN_AND_MEAN可以节省每个C文件3秒的编译时间。当你的项目由20个C文件组成时,这相当于节省了整整一分钟。

相关问题