關於_WIN32_WINNT

http://blog.csdn.net/baozi3026/article/details/5353720


本打算了解一下纖程內容,在試圖使用 ConvertThreadToFiber的時候,編譯總是出錯,提示信息如下:error C2065: 'ConvertThreadToFiber' : undeclared identifier,編譯器告訴我“函數未聲明”。於是轉而查看MSDN,有內容如下:

Requirements:

Windows NT/2000: Requires Windows NT 3.51 SP3 or later.
Windows 95/98: Requires Windows 98.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.  

但明明已經#include <Windows.h>了。不得已,又經Windows.h進入Winbase.h中,查看源碼,見聲明之前有條件編譯語 句:#if(_WIN32_WINNT >= 0x0400),由此發現我的程序並沒有聲明宏_WIN32_WINNT。最終在StdAfx.h文件的#include <windows.h>語句之前添加語句:

#define _WIN32_WINNT 0x0400

編譯通過。

理解_WIN32_WINNT的作用:

需要你自已在stdafx.h頭文件中定義。編譯器根據此宏來確定windows的版本,如果你需要使用高版本的WIN32函數,只有你定義了此宏後才能使用
    
Windows   XP                                      _WIN32_WINNT>=0x0501     
Windows   2000                                   _WIN32_WINNT>=0x0500     
Windows   NT   4.0                               _WIN32_WINNT>=0x0400     
Windows   Me                                      _WIN32_WINDOWS=0x0490     
Windows   98                                      _WIN32_WINDOWS>=0x0410     
Internet   Explorer   6.0                         _WIN32_IE>=0x0600     
Internet   Explorer   5.01,   5.5                _WIN32_IE>=0x0501     
Internet   Explorer   5.0,   5.0a,   5.0b        _WIN32_IE>=0x0500     
Internet   Explorer   4.01                       _WIN32_IE>=0x0401     
Internet   Explorer   4.0                        _WIN32_IE>=0x0400     
Internet   Explorer   3.0,   3.01,   3.02        _WIN32_IE>=0x0300

PS:當然也可以在程序的C++的預處理器中設置。

------------------------------------------------------------------------

MSDN中的描述

Using   the   SDK   Headers   
    
  This   version   of   the   Microsoft&reg;   Platform   SDK   enables   you   to   create   applications   that   run   on   Microsoft   Windows&reg;   95,   Microsoft   Windows   NT&reg;   4.0,   Windows&reg;   98,   Windows   Millennium   Edition   (Windows   Me),   Windows   2000,   Windows   XP,   and   Windows   .NET   Server   2003   family.   You   can   also   create   64-bit   applications.   The   header   files   use   data   types   that   allow   you   to   build   both   32-   and   64-bit   versions   of   your   application   from   a   single   source   code   base.   For   more   information,   see   Getting   Ready   for   64-bit   Windows.   
    
    
  Microsoft&reg;   Visual   C++&reg;   includes   content   from   the   edition   of   the   Platform   SDK   that   was   current   at   the   time   Visual   C++   was   released.   Therefore,   if   you   install   the   latest   Platform   SDK,   you   may   end   up   with   multiple   versions   of   the   same   header   files   on   your   computer.   To   ensure   that   you   are   using   the   latest   version   of   the   SDK   header   files,   follow   the   directions   included   in   Installing   the   Platform   SDK   with   Visual   Studio.   Otherwise,   you   will   receive   the   following   error   when   compiling   code   that   uses   features   that   were   introduced   after   Visual   C++   was   released:   error   C2065:   undeclared   identifier.   
    
  Certain   functions   that   depend   on   a   particular   version   of   Windows   are   declared   using   conditional   code.   This   enables   you   to   use   the   compiler   to   detect   whether   your   application   uses   functions   that   are   not   supported   on   its   target   version(s)   of   Windows.   To   compile   an   application   that   uses   these   functions,   you   must   define   the   appropriate   macros.   Otherwise,   you   will   receive   the   C2065   error   message.   The   following   table   indicates   the   macros   you   must   define   to   target   each   system.   
    
  Minimum   system   required   Macros   to   define     
  Windows   .NET   Server   2003   family   _WIN32_WINNT>=0x0502     
  Windows   XP   _WIN32_WINNT>=0x0501     
  Windows   2000   _WIN32_WINNT>=0x0500     
  Windows   NT   4.0   _WIN32_WINNT>=0x0400     
  Windows   Me   _WIN32_WINDOWS=0x0490     
  Windows   98   _WIN32_WINDOWS>=0x0410     
  Internet   Explorer   6.0   _WIN32_IE>=0x0600     
  Internet   Explorer   5.01,   5.5   _WIN32_IE>=0x0501     
  Internet   Explorer   5.0,   5.0a,   5.0b   _WIN32_IE>=0x0500     
  Internet   Explorer   4.01   _WIN32_IE>=0x0401     
  Internet   Explorer   4.0   _WIN32_IE>=0x0400     
  Internet   Explorer   3.0,   3.01,   3.02   _WIN32_IE>=0x0300     
    
    
  For   example,   to   use   the   features   specifically   marked   for   Windows   2000   in   the   header   files,   you   need   to   explicitly   define   _WIN32_WINNT   as   0x0500   or   greater.   You   can   define   the   symbols   using   the   #define   statement   in   each   source   file,   or   by   specifying   the   /D_WIN32_WINNT=0x0500   compiler   option   supported   by   Visual   C++.   
    
  Visual   C++   6.0:     To   specify   compiler   options,   Go   to   the   Projects   menu   and   click   Settings,   then   select   the   C/C++   tab.   
    
  Visual   C++   7.0:     To   specify   compiler   options,   go   to   the   Projects   menu   and   click   Properties.   
    
  The   macros   in   Win32.mak   can   help   you   define   the   correct   macros.   The   value   of   _WIN32_WINNT   depends   on   the   platform   you   choose   to   target.   For   more   information,   see   Building   Applications   Using   Win32.mak.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章