关于 WinSock2.h 与 WinSock.h 文件重定义冲突的 解决办法

事实上一直都用的是Winsock1的,还从来没有用过Winsock2,今天开始使用它,但是出现了一大堆的错误,都是那个C2011和C2375之类的错误。当时就想,是不是2和1发生了冲突了?但是我没有包含过1的头文件啊?!
后来一查,在Windows.h里面发现了这么一段代码:

#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif

我就一个倒。。。。
原来是这里包含了。。。。
对付这个的终极解决办法是:

#define WIN32_LEAN_AND_MEAN 
#include <Windows.h>

即是在包含Windows.h前加入#define WIN32_LEAN_AND_MEAN这条语句,它能够将上面的语句包含winsock.h的语句消减掉。

后面在网上看到另外一种解决方案,其代码如下:

#ifndef _WINSOCKAPI_           // 没有包含winsock.h
#define _WINSOCKAPI_           // 避免再包含winsock.h
    #ifndef _WINSOCK2API_      // 没有包含winsock2.h
    #define _WINSOCK2API_      // 避免再包含winsock2.h
        #include <winsock2.h>
        #pragma comment(lib, "ws32_2.lib")
    #endif
#endif

其实这个代码是有缺陷的,如果是先包含的windows.h,然后再包含这段语句的,事实上,这个语句什么事情都没有做,是一条废语句,要想它有用,就必须在包含windows.h之前包含这段语句所在的头文件。事实上,这个解决方案不是很好的。 
使用这个方法,必须要注意的是:必须在包含Windows.h头文件之前使用它,否则很有可能是无效的,当然如果您在包含Windows.h之前使用了#define WIN32_LEAN_AND_MEAN,那么,自然它还是有效的了。这是治标不治本的一个办法。

时间: 2024-08-04 02:19:31

关于 WinSock2.h 与 WinSock.h 文件重定义冲突的 解决办法的相关文章

文件重定义冲突的分析与解决

引言 有时候看到论坛上有人问编译时重定义现象的问题.这个问题与头文件包含冲突有关,改一改相关头文件包含就会让问题消失.我在这里要以 <windows.h> <winsock.h> <winsock2.h>这3个头文件为例分析为什么会产生这种原因:然后给出一种不会产生冲突的做法:最后就此例的分析给出结论.本文对于已经知道冲突原因的读者是多余的,但对于一时没有时间去解的人还是有一定的参考价值的. 一个重命名的例子 先写一个socket基本操作类: // SocketBase

关于SSIS批量抽取Excel文件报0x80004005错误的解决办法

原文:关于SSIS批量抽取Excel文件报0x80004005错误的解决办法 标题: Microsoft Visual Studio ------------------------------ Package [连接管理器"Excel 连接管理器"] 出错: SSIS 错误代码 DTS_E_OLEDBERROR.出现 OLE DB 错误.错误代码: 0x80004005. 已获得 OLE DB 记录.源:"Microsoft JET Database Engine"

java代码-求上传文件中nosuchmethoderror(androidsdk与httpclientjar冲突)解决办法

问题描述 求上传文件中nosuchmethoderror(androidsdk与httpclientjar冲突)解决办法 android项目使用阿里云上传文件的Sample文件代码,出现了nosuchmethoderror,然后我顺着日志查到android sdk中在org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager这个类里只有一个构造方法,而代码依赖的httpclient是4.1.3版本,相同的类里有4个构造方法,我认为问题可

Eclipse编辑jsp、js文件时卡死现象的解决办法汇总_javascript技巧

使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windows–>perferences–>validation 把 除了manual 下面的全部点掉,build下只留 classpath dependency Validator 2.关闭拼写检查 windows–>perferences–>general–> editors->

使用AndroidStudio上传忽略文件至SVN Server的解决办法

在同组项目进行共享时,容易把本地的配置文件比如*.iml等文件上传至共享服务器,这样会对队友造成巨大的麻烦,为了解决这个问题,可以使用下面方法解决,下面以上传到服务器的app.iml文件为例. 一.在AS的Setting中取消忽略文件后缀".iml": 二.在Windows目录中找到当前项目下的"app.iml"文件,右键该文件,选中TortoiseSVN,如下图2位置: 图2 在该项下选择Delete,删除该文件,如下图3所示: 图3 三.删除该文件后,在当前目录

linux删除文件后没有释放空间解决办法

今天介绍的是一个很实用的工具:lsof.能够查找到正在占用中的进程. centos安装命令: yum -y install lsof 实例可以看看这位仁兄的博客即可.本博客主已经证实真实可靠! 发现当前磁盘空间使用情况:   [root@ticketb ~]# df -h Filesystem            Size  Used Avail Use% Mounted on /dev/sda1             981M  203M  729M  22% / none        

视频文件播放图像异常故障解决办法

  在使用电脑播放视频文件的过程中,有时出现图像闪烁.色彩异常等现象.特别是播放DivX/XviD及MPEG文件更容易出现这类现象.出现这类现象多是由于视频解码器或视频过滤器出现问题而造成的.下面深度xp系统下载站小编就来看看视频文件播放异常常用的解决方法. 1.影音不同步故障分析.巧解决 在播放部分压缩格式的视频电影时,有时会出现声音播放正常,画面总是断断续续的现象.出现这种现象,主要有以下几个方面的问题. (1)电脑配置低,内存太小 电脑硬件的升级总是滞后于台式机,如果所使用的电脑配置较低,

PHPExcel导出Excel文件时出现错误的解决办法

PHPExcel是PHP中功能最强大的导入.导出.操作Microsoft Excel的开源项目.但是它体系复杂,有时会让人难以掌控. PHPExcel导出Excel表的使用方法网上已经很多了,本文就不赘述.不过,在使用过程中,我却发现了一个莫名其妙的问题:那就是使用PHPExcel自动导出excel的文件有时候能够正常导出并打开,有时候生成的excel文件却无法打开,Excel2007提示"发现无法读取的内容". 使用文本编辑器打开生成的Excel文件,发现一行提示"Fata

Win7/win8删除文件提示&quot;目标文件/文件夹访问被拒绝&quot;解决办法

一,如果你文件打开的或被其它应用程序占用可以是无法删除,这个在windowsxp中也是这样的 二,如果不是那应该权限问题了,我们可参考下面方法解决. 访问文件/文件夹被拒绝提示如下图: 一.查看当前文件/文件夹的权限情况 鼠标右键该文件/文件夹,选择属性(Properties),如下图所示,可以看到示例文件C_PAN.GHO属于Everyone组,但权限仅限于读写和执行,但没有修改权限(添加删除修改),所以想删除就无法执行.实际中,你的权限可能不是下图样式,或是如下情况之一: 所有人为当然用户/