日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

winsock2.h与ws2def.h等文件大量报错相关问题解决方法

發布時間:2023/12/9 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 winsock2.h与ws2def.h等文件大量报错相关问题解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:

最近在寫網絡編程相關內容,本來好好的代碼寫著寫著就出現了大量錯誤

看了下文件,全都是winsock2、ws2def 、ws2ipdef、ws2tcpip內的報錯

緣由:

我們知道,Windows網絡編程至少需要兩個頭文件:winsock2.h和windows.h,而在WinSock2.0之前還存在一個老版本的winsock.h。正是這三個頭文件的包含順序,導致了上述問題的出現。
winsock2.h的內容,在文件開頭有如下宏定義:

#ifndef _WINSOCK2API_ #define _WINSOCK2API_ #define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */...... 中間已省略 ....../** Pull in WINDOWS.H if necessary*/ #ifndef _INC_WINDOWS #include <windows.h> #endif /* _INC_WINDOWS */

這是最常見的防止頭文件重復包含的保護措施。
_WINSOCKAPI_的定義阻止了對老文件winsock.h的包含
即是說,如果用戶先包含了winsock2.h就不允許再包含winsock.h了,
后半段作用是:如果用戶沒有包含windows.h(_INC_WINDOWS在windows.h中定義)就自動包含它,以定義WinSock2.0所需的類型和常量等。

現在切換到windows.h,我們會的發現以下內容:(注:這里是MS的Platform SDK中的windows.h與VC自帶的文件存在差異)

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

其實很容易理解,文件間相互包含,而的定義順序導致了winsock在winsock2之前被包含,就會導致大量重復定義的錯誤。

解決:

找到代碼中包含windows.h和winsock2.h的地方,讓winsock2在windows之前被包含就行了
(或者專門寫個頭文件,用于解決這個問題)

#include <WinSock2.h> #include <windows.h>

如果發現解決方案里并未發現包含這兩個文件,
那么很有可能是使用的開發包或者其他文件中使用了內容

我就是類似問題,開發中使用了winpcap,winpcap開發包中會包含winsock2,所以在windows.h之前包含pacp.h

在改變順序之后

報錯就全部解決了,剩下的都是我的自有bug(媽耶,寫錯這么多的嘛)

總結

以上是生活随笔為你收集整理的winsock2.h与ws2def.h等文件大量报错相关问题解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。