windows.h socket2 沖突
好像inlucde windows 會(huì)默認(rèn)使用winsocket1 ,我們現(xiàn)在寫(xiě)程序都是使用socket2 . 編譯會(huì)沖突.
1.種方法
#define WIN32_LEAN_AND_MEAN
放在windows.h 之前.
2. 先引入socket2.h文件.
3. 項(xiàng)目 -> 屬性 -> C/C++ -> 預(yù)處理器 -> 預(yù)處理器定義
放在windows.h 之前.
2. 先引入socket2.h文件.
3. 項(xiàng)目 -> 屬性 -> C/C++ -> 預(yù)處理器 -> 預(yù)處理器定義
在其中添加 : WIN32_LEAN_AND_MEAN
WIN32_LEAN_AND_MEAN: Windows 頭文件使用此符號(hào)來(lái)排除很少使用的頭文件。請(qǐng)參考 Windows.H,以確定當(dāng)定義了此符號(hào)時(shí),將排除的文件。由于 MFC 定義 WIN32_LEAN_AND_MEAN,所有 MFC 項(xiàng)目自動(dòng)都使用它。
下面具體分析一下問(wèn)題是怎么發(fā)生的。
參考
http://support.microsoft.com/kb/166474/zh-cn
http://tieba.baidu.com/p/705524374
錯(cuò)誤情形1:我們?cè)谧约旱墓こ讨邢劝瑆insock2.h再包含windows.h,如果WIN32_LEAN_AND_MEAN未定義且 _WIN32_WINNT大于或等于0x400,那么windows.h會(huì)在winsock2.h開(kāi)頭被自動(dòng)引入,而windows.h又會(huì)自動(dòng)引入 mswsock.h,此時(shí),mswsock.h里所用的socket類(lèi)型還尚未定義,因此會(huì)出現(xiàn)類(lèi)型未定義錯(cuò)誤。
錯(cuò)誤情形2:先包含 windows.h再包含winsock2.h,如果WIN32_LEAN_AND_MEAN未定義且_WIN32_WINNT未定義或者其版本號(hào)小于 0x400,那么windows.h會(huì)自動(dòng)導(dǎo)入舊有的winsock.h,這樣再當(dāng)winsock2.h被包含時(shí)便會(huì)引起重定義。
這里要說(shuō)明的是,宏WIN32_LEAN_AND_MEAN的作用是減小win32頭文件尺寸以加快編譯速度,一般由AppWizard在stdafx.h中自動(dòng)定義。_WIN32_WINNT的作用是開(kāi)啟高版本操作系統(tǒng)下的特殊函數(shù),比如要使用可等待定時(shí)器(WaitableTimer),就得要求 _WIN32_WINNT的值大于或等于0x400。因此,如果你沒(méi)有遇到上述兩個(gè)問(wèn)題,很可能是你沒(méi)有在這些條件下進(jìn)行網(wǎng)絡(luò)編程。
VC_EXTRALEAN 和WIN32_LEAN_AND_MEAN 用于排除Windows 標(biāo)頭在很少 使用的服務(wù)
posted on 2015-01-04 15:16 小高 閱讀(911) 評(píng)論(0) 編輯 收藏