如何解决windows.h和WinSocket2.h的冲突

如何解决windows.h和WinSocket2.h的冲突

在一个大的VC++工程里,经常会遇到这样一个问题,比如想要使用一个库,而这个库里要使用<Windows.h>头文件,但是这样会引起后面代码里使用WinSocket2.h的冲突,导致整个工程编译不过。为了解决这个问题,可以把WinSocket2.h提前,包含到<Windows.h>之前,如下所示:

#include <WinSocket2.h>
#include <Windows.h>

typedef struct
{
    CRITICAL_SECTION cs;
    char is_valid;
} mbedtls_threading_mutex_t;

这样就会先包含WinSocket2.h文件,这样就不会导致冲突了。其实,VC里还提供了另外一个宏定义WIN32_LEAN_AND_MEAN,定义了这个宏就可以减少编译时包含的头文件,并且提高编译速度。由于定义这个宏,导致WinSocket2.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 */

从这里可以看到,它是怎么样减少头文件包含,以及不引起冲突的,所以冲突的头文件顺序可以写成这样:

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

typedef struct
{
    CRITICAL_SECTION cs;
    char is_valid;
} mbedtls_threading_mutex_t;

到这里,就可以完善地解决了这个问题。

C++标准模板库从入门到精通 
http://edu.csdn.net/course/detail/3324

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值