• Windows.h与Winsock2.h包含顺序问题


    当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下:

    1>…\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
    1>…\include\winsock.h(460) : see previous definition of 'AF_IPX'

    [原因分析] 
          主要原因是因为<Windows.h>中包含了<Winsock.h>头文件,由于其版本的不同,导致出现上述的错误。<Windows.h>中相关代码如下:
                   #ifndef WIN32_LEAN_AND_MEAN
                   #include <cderr.h>
                   #include <dde.h>
                   #include <ddeml.h>
                   ........
                    #ifndef _MAC
                   #include <winperf.h>
                   #include <winsock.h>
                   #endif
                    .......
                   #include <commdlg.h>
                   #endif
                   #endif

    [解决方案] 
          由以上代码可以看出如果在没有定义WIN32_LEAN_AND_MEAN宏的大前提下Windows.h有可能包含Winsock.h 头文件,而我们要用的头文件为 <Winsock2.h>,那么Windows.h中的<Winsock.h>和我们需要的不是一个版本,所以会有以上的错误。

    [如何解决]

          很简单,在当前工程(就是编译不过的这个工程)所有include语句最前面加上#include <Winsock2.h>这样就避免了重复定义头文件的错误。

  • 相关阅读:
    【产品分析】数据中台
    【设计】设计规范
    【产品分析】用户行为分析套路
    【产品复盘】谷歌Chrome是如何蚕食互联网的?
    【设计】图表设计
    command
    解决win7系统远程桌面 server 2003 卡的问题
    sqlmap遇到url重写的示例
    ASP中可能出现的一种包含漏洞(Server.execute)
    绕过杀毒软件抓取windows密码
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2755200.html
Copyright © 2020-2023  润新知