winsock2编译出错

  写了一个winsock UDP数据传输的类,当合到大的工程里面的时候,出现的首要问题是说winsock.h和winsock2.h里有重定义,还伴随着各种问题。。。发现时因为大工程里有include windows.h文件,而windows.h文件里又include<winsock.h>文件,所以重定义。于是对这个问题搜索了一下,发现有两个解决方法。

  一个是说windows.h被包含进来了,位置是:
      afxwin.h包含afx.h
      afx.h包含afxver_.h
      afxver_.h包含afxv_w32.h
      afxv_w32.h包含windows.h
      但包含windows.h的时候没有包含winsock.h

// Don't include winsock.h
#pragma push_macro("_WINSOCKAPI_")
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif
 
#include <windows.h>
 
#pragma pop_macro("_WINSOCKAPI_")

    所以你要使用winsock2的函数就很简单了
    #include <winsock2.h>
    #pragma comment(lib, "Ws2_32.lib")

  第二种是说将windows.h里的winsock换成winsock2就可以,但是这样只是在自己电脑上可以。。不是很好的方法。。。

 

原文地址:https://www.cnblogs.com/tlsdba/p/2764923.html