JUST DO IT ~

          我只想當個程序員

          windows.h socket2 沖突


          好像inlucde windows 會默認使用winsocket1 ,我們現(xiàn)在寫程序都是使用socket2 . 編譯會沖突.

          1.種方法  
          #define WIN32_LEAN_AND_MEAN
          放在windows.h 之前.

          2. 先引入socket2.h文件.

          3. 項目 -> 屬性 -> C/C++ -> 預處理器 -> 預處理器定義

          在其中添加 : WIN32_LEAN_AND_MEAN


          WIN32_LEAN_AND_MEAN: Windows 頭文件使用此符號來排除很少使用的頭文件。請參考 Windows.H,以確定當定義了此符號時,將排除的文件。由于 MFC 定義 WIN32_LEAN_AND_MEAN,所有 MFC 項目自動都使用它。


          下面具體分析一下問題是怎么發(fā)生的。

          參考
          http://support.microsoft.com/kb/166474/zh-cn
          http://tieba.baidu.com/p/705524374

          錯誤情形1:我們在自己的工程中先包含winsock2.h再包含windows.h,如果WIN32_LEAN_AND_MEAN未定義且 _WIN32_WINNT大于或等于0x400,那么windows.h會在winsock2.h開頭被自動引入,而windows.h又會自動引入 mswsock.h,此時,mswsock.h里所用的socket類型還尚未定義,因此會出現(xiàn)類型未定義錯誤。

          錯誤情形2:先包含 windows.h再包含winsock2.h,如果WIN32_LEAN_AND_MEAN未定義且_WIN32_WINNT未定義或者其版本號小于 0x400,那么windows.h會自動導入舊有的winsock.h,這樣再當winsock2.h被包含時便會引起重定義。

          這里要說明的是,宏WIN32_LEAN_AND_MEAN的作用是減小win32頭文件尺寸以加快編譯速度,一般由AppWizard在stdafx.h中自動定義。_WIN32_WINNT的作用是開啟高版本操作系統(tǒng)下的特殊函數(shù),比如要使用可等待定時器(WaitableTimer),就得要求 _WIN32_WINNT的值大于或等于0x400。因此,如果你沒有遇到上述兩個問題,很可能是你沒有在這些條件下進行網絡編程。
          VC_EXTRALEAN 和WIN32_LEAN_AND_MEAN 用于排除Windows 標頭在很少 使用的服務

          posted on 2015-01-04 15:16 小高 閱讀(916) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           

          導航

          <2015年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 安仁县| 遵义县| 许昌县| 集安市| 故城县| 忻州市| 高碑店市| 日喀则市| 定安县| 福鼎市| 迭部县| 花莲县| 开鲁县| 塔河县| 盐城市| 岑溪市| 宜州市| 广汉市| 濮阳市| 黄浦区| 英超| 萨嘎县| 潼南县| 南召县| 庄河市| 安塞县| 阳春市| 南阳市| 昌黎县| 巴青县| 鹤山市| 肃宁县| 堆龙德庆县| 阳江市| 黄骅市| 惠来县| 永德县| 柞水县| 阿合奇县| 孟州市| 沈丘县|