winsock.h与winsock2.h冲突解决

Posted zhulinu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winsock.h与winsock2.h冲突解决相关的知识,希望对你有一定的参考价值。

今天把原来的工程由mfc换成了非mfc工程,出现了很多错误,现记录下来,作为备份。

摘要内容为:

>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义
1>        c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\winsock.h(460) : 参见“AF_IPX”的前一个定义
1>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(127) : warning C4005: “AF_MAX”: 宏重定义
1>        c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\winsock.h(479) : 参见“AF_MAX”的前一个定义
1>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定义
1>        c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\winsock.h(402) : 参见“SO_DONTLINGER”的前一个定义
1>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(206) : error C2011: “sockaddr”: “struct”类型重定义
1>        c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\winsock.h(485) : 参见“sockaddr”的声明
1>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(384) : error C2143: 语法错误 : 缺少“”(在“常量”的前面)
1>c:\\program files\\microsoft sdks\\windows\\v6.0a\\include\\ws2def.h(384) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)


解决办法,本工程采用与编译头编译。

在stdafx.h中添加:

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <winsock2.h>
#include <windows.h>

在targetver.h中修改

#ifndef WINVER                          // 指定要求的最低平台是 Windows Vista。
#define WINVER 0x0600           // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0600     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

#ifndef _WIN32_WINDOWS          // 指定要求的最低平台是 Windows 98。
#define _WIN32_WINDOWS 0x0410 // 将此值更改为适当的值,以适用于 Windows Me 或更高版本。
#endif

#ifndef _WIN32_IE                       // 指定要求的最低平台是 Internet Explorer 7.0。
#define _WIN32_IE 0x0700        // 将此值更改为相应的值,以适用于 IE 的其他版本。
#endif

然后先编译

stdafx.cpp文件

编译好后在编译其他文件就不会出现此问题了。

以上是关于winsock.h与winsock2.h冲突解决的主要内容,如果未能解决你的问题,请参考以下文章

winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)

winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)

winsock开发重复定义问题

WinSock2.h 中的重新定义错误 [重复]

<winsock.h> 和 <winsock2.h> 之间有区别吗?

VS2008 编译错误 <winsock2.h>