    UNICODE 

     17 

    Microsoft Windows   ,  , ,  
     .   
,        
     .      
       ,  
  ,         . 
     Windows  ,     
.         
 ,    ^32-1,   
 ,  ,   Control Panel 
( ).  , Windows    . 

      

             
 .       
     ,      
,         .    
strlen        
 .        
(   ),    ,   , 
    256 ,  .  
        
(double-byte character sets, DBCS). 

    -     

          ,   
.   ,       081  
Ox9F     OxFC,       , 
   .       
   ,        ,  
   . 
      strlen          
  .  ANSI-     , 
    .     
Visual C++    ( _mbslen),    
   (. .  -,    ). 

    581 

    582 ___________________________Windows   

       DBCS-  Win32    
 : 

                                       

    LPTSTR CharNext(LPCTSTR IpszCurrentChar);       
  . 
    LPTSTR CharPrev(LPCTSTR IpszStart,              
  . LPCTSTR IpszCurrentChar); 
    BOOL IsDBCSLeadByte(BYTE bTestChar);         TRUE,   
    DBCS-. 

     CharNext  CharPrev     
     , a IsDBCSLeadByte  TRUE,  
       . 
           DBCS-,  
   .   Unicode. 
     Microsoft   AnsiNext  AnsiPrev  Win32, - 
,        DBCS-,   ANSI-  
   .   AnsiNext  AnsiPrev   Win32 
API   CharNext  CharPrev.    Win32   
  16-    : 

    define AnsiNext CharNextA 
    Sdefine AnsiPrev CharPrevA 
    Unicode:    

    Unicode  ,    Apple  Xerox  
1988 .  1991         
Unicode,    Adobe, Aldus, Apple, Borland, Digital, Go, IBM, 
Lotus, Metaphor, Microsoft, NeXT, Novell, Research Libraries Group, Sun, 
Taligent, Unisys, WordPerfect  Xerox.      
  Unicode,        The 
Unicode Standard: Worldwide Character Encoding ( Addison-Wesley). 
      Unicode   .      
16-  ( 2   ).     , 
,    :       
.  ,       
     .  CharNext, 
CharPrev  IsDBCSLeadByte   . 
         16- , Unicode   
 65 000 ,         . 
   256 ,    ! 
         (code points)'   , 
, , ,  () ,  
   (),  ,     
 .  ,       
 ,    , , 
   .      34 000  
,      . 
    1.        . 

    _____________________________________ 17. Unicode 583 

     65 536     .  ,   
      : 

    16-       

    0000-007F          ASCII 
    0080-OOFF          Latini 
    0100-017F            
    0180-0 IFF           
    0250-02AF           
    02BO-02FF           
    0300-036F            
    0370-03FF           
    0400-04FF          
    0530-058F          
    0590-05FF           
    0600-06FF           
    0900-097F           

     29 000     ,    
.  6 000      (  ). 

     Unicode? 

     ,    Unicode.   
      ,    
 Unicode     .  , Unicode: 
          ; 
         -  DLL-, 
  ; 
         (     ). 
         Unicode 
    Microsoft  Win32 API ,       
 .   ,         
 ,     Unicode,    .  
  Unicode  ,  2 ,   . 
    Windows NT  Unicode 
    Windows NT    ,     
 Unicode.      ,  ,  
   . .      Unicode.  
- Win32^yHKHHH 

    584 _____________________________Windows   

     ANSI-,     Unicode    
  .        
ANSI-,         
   Unicode  ANSI.       
. , ,          . 
    ,  CreateWindowEx,   ANSI-   
   , ,     ( 
   ),     Unicode , 
     ,  Unicode- CreateWindowEx. 
     ,     ,   
           
Unicode  ANSI. -         
 .     ,  
    Unicode. 

    Windows 95  Unicode 

    Windows 95      .   16- 
,    Unicode.   Unicode  
Windows 95     ,     
    .      
   Windows 95,     ,   
 ANSI. 
       Windows 95     Win32-poe, 
     Unicode,   Win32-y   
 . ,  ,   CreateWindowEx,  
 ANSI-,          
,   .     Create WindowEx  
Unicode-,      ,   
\\[32-,    Unicode  ANSI,   
CreateWindowEx,   \^32-'.,      
  ANSI  Unicode,    .    Windows 95 
  Unicode   ,   Windows NT.   
   Windows 95     . 

    Unicode     

      Unicode-      . 
   STRING.H :    wchar_t 
   Unicode-: 

    typedef unsigned short wchar_t: 

      , ,     Unicode-  
 99      ,  : 

    wchar_t szBuffer[100]; 

        100 16- . ,   
     strcpy, strchr  strcat    
ANSI-      Unicode-.  
 ,   .  . 17-1   
      ANSI    Unicode-. 

    ____________________________________ 17. Unicode 585 


    char * strcat(char *, const char ): 
    wchar_t * wcscat(wchar_t *, const wchar_t *); 
    char * strchr(const char *, int); 
    wchar_t * wcschr(const wchar_t *, wchar_t); 
    int strcinp( const char *, const char *); 
    int wcsc(np(const wchar_t *, const wcriar_t *); 
    int _stricmp(const char *, const char *); 
    int _wcsicmp(const wchar_t *. const wchar_t *); 
    int strcoll(const char *, const char *); 
    int wcscoll(const wchar_t *, const wchar_t ); 
    int _stricoll(const char *, const char *); 
    int _wcsicoll(cohst wchar_t *, const wchar_t *); 
    char * strcpy(char *, const char *); 
    wchar_t * wcscpy(wchar_t *, const wchar_t *); 
    size_t strcspn(const char *. const char *); 
    size_t wcscspn(const wchar_t *, const wchar_t *); 
    char * _strdup(const char *); 
    wchar_t * _wcsdup(const wchar_t *); 
    size_t strlen(const char *); 
    size_t wcslen(const wchar_t *); 
    char * _strlwr(char *); 
    wchar_t * _wcslwr(wchar_t *); 
    char * strncat(char *, const char *, size_t); 
    wchar_t * wcsncat(wchar_t *, const wchar_t *, size_t); 
    int strncmp(const char *, const char *, size_t); 
    int wcsncmp(const wchar_t *, const wchar_t *, size_t); 
    int _strnicmp(const char *, const char *, size_t); 
    int _wcshicmp(const wchar_t *, const wchar_t *, size_t); 
    char * strncpy(char *, const char *, slze_t); 
    wchar_t * wcsncpy(wchar_t *, const wchar_t *, size_t); 
    char * _strnset(char *, int, size_t); 
    wchar_t * _wcsnset(wchar_t *, wchar_t, size_t); 

    . . . 

    . 17-1.       ANSI   Unicode- 

    586 _____________________________Windows   


    . 17-1   () 

    char * strpbrk(const char *, const char *); 
    wchar_t * wcspbrk(const wchar_t *, const wchar_t *); 
    char  strrchr(const char *, int); 
    wchar_t * wcsrchr(const wchar_t *, wchar_t); 
    char * _strrev(char *),; 
    wchar_t * _wcsrev(wchar_t *); 
    char * _strset(char *, int); 
    wchar_t * _wcsset(wchar_t *, wchar_t): 
    size_t strspn(const char *, const char *); 
    size_t wcsspn(const wchar_t *, const wchar_t *); 
    char * strstr(const char *, const char *); 
    wchar_t * wcsstr(const wchar_t *, const wchar_t *): 
    char * strtok(char *, const char *); 
    wchar_t * wcstok(wchar_t *, const wchar_t *); 
    char * _strupr(char *); 
    wchar_t * _'wcsupr(wchar_t *); 
    size_t strxfrm(char *, const char *, size_t); 
    slze_t wcsxrrm(wchar_t *, const wchar_t *, size_t); 

     ,        wcs   
 wide character set (  ).  ,  
Unicode-     str  
ANSI-  wcs. 
    ,    str-  /5-,   
    ANSI,  Unicode .   
   ,     
  STRING.H  TCHAR.H.     
 ,    ANSI,   Unicode,    
,     TCHAR.H.    ,  
  str-  /5-.       
 _UNICODE,    wcs-,      
 5<-.  . 17-2      TCHAR.H  
,        ,  _UNICODE  . 

      TCHAR.H        UNICODE          _UNICODE   

    _tprintf                      wprintf                          printf 
    _ftprintf                      fwprintf                         fprintf 
    _stprintf                      swprintf                         sprintf 
    _sntprintf                    _snwprintf                       _snprintf 

    . . . 

    . 17-2.    TCHAR.H    

    ___________________________________ 17. Unicode 587 


    . 17-2 () 

      TCHAR.H UNICODE  UNICODE   

    _vtprintf vwprintf vprintf 
    _vftprintf vfwprintf vfprintf 
    _vstprintf vswprintf vsprintf 
    _vsntprintf _vsnwprintf _vsnprintf 
    _tscanf wscanf scanf 
    _ftscanf fwscanf fscanf 
    _stscanf swscanf sscanf 
    _fgettc fgetwc fgetc 
    _fgettchar _fgetwchar _fgetchar 
    _fgetts fgetws fgets 
    _fputtc fputwc fputc 
    _fputtchar _fputwchar _fputchar 
    _fputts fputws fputs 
    _gettc getwc getc 
    _getts _getws _gets 
    _puttc putwc putc 
    _putts _putws _puts 
    _ungettc ungetwc ungetc 
    _tcstod wcstod strtod 
    _tcstol wcstol strtol 
    _tcstoul wcstoul strtoul 
    _tcscat wcscat strcat 
    _tcschr wcschr strchr 
    _tcscmp wcscmp strcmp 
    _tcscpy wcscpy strcpy 
    _tcscspn wcscspn strcspn 
    _tcslen wcslen strlen 
    _tcsncat wcsncat strncat 
    _tcsncmp wcsncmp strncmp 
    _tcsncpy wcsncpy strncpy 
    _tcspbrk wcspbrk strpbrk 
    _tcsrchr wcsrchr strrchr 
    _tcsspn wcsspn strspn 
    _tcsstr wcsstr strstr 
    _tcstok wcstok strtok 
    _tcsdup _wcsdup _strdup 
    _tcsicmp _wcsicmp _stricmp 
    _tcsnicmp _wcsnicnip _strnicmp 
    _tcsnset _wcsnset _strnset 

    . . . 

    588 _____________________________Windows   


    . 17-2   () 

      TCHAR.H        UNICODE          _UNICODE   

    _tcsrev                         _wcsrev                           _strrev 
    _tcsset                         _wcsset                            _strset 
    _tcslwr                         _wcslwr                           _strlwr 
    _tcsupr                        _wcsupr                           _strupr 
    _tcsxfrm                       wcsxfrm                           strxfrm 
    _tcscoll                        wcscoll                            strcoll 
    _tcsicoll                        _wcsicoll                          _stricoll 
    _istalpha                       iswalpha                           isalpha 
    _istupper                       iswupper                          isupper 
    _istlower                       iswiower                           islower 
    _istdigit                        iswdigit                            isdigit 
    _istxdigit                       iswxdigit                           isxdigit 
    _istspace                       iswspace                           isspace 
    _istpunct                       iswpunct                          ispunct 
    _istalnum                      iswalnum                          isalnum 
    _istprint                       iswprint                           isprint 
    _istgraph                       iswgraph                           isgraph 
    _istcntrl                        iswcntrl                            iscntrl 
    _istascii                        iswascii                            isascii 
    _totupper                      towupper                          toupper 
    _totlower                      towlower                          tolower 

        .   ,  
      Unicode,    ANSI.     
.   TCHAR.H   . 
          
(ANSI/Unicode),    TCHAR.  _UNICODE , TCHAR 
 : 

    typedef wchar_t TCHAR; 
      _UNICODE  , : 
    typedef char TCHAR; 

       ,    , : 

    TCHAR szStnng[100]; 

         : 

    TCHAR szError = "Error"; 

    ,      .    C++ 
 Microsoft       ANSI,   
Unicode.      ,  _UNICODE  
,      .    
Unicode-,   ANSI-,    : 

    TCHAR *szError = L"Error"; 

    ____________________________________ 17. Unicode 589 

      L     ,   
   Unicode-. ,      
,       .  
     ,   _UNICODE 
. ,  ,    L  
 .     _,    
TCHAR.H.   _UNICODE,  _  : 

    ftdefine _TEXT(x)    L ## x 

       _   : 

    ftdefine _TEXT(x)    x 

      ,   ,    
     ,  _UNICODE  : 

    TCHAR *szError = _(""); 

     _     . ,  
,        /: 

    if (szError[0] == _TEXT('J')) { 
    //   - J 
    } else < 
    //   -  J 

     ,   Win32  Unicode 

       Win32    : 

           

    WCHAR       Unicode- 
    LPWSTR          Unicode- 
    LPCWSTR            Unicode 

               
Unicode.    Win32    
(ANSI/Unicode)   LPTSTR  EPCTSTR,      
,      UNICODE,   ANSI-   Unicode-. 
    ,      UNICODE    
.   ,   _UNICODE    
   ,   UNICODE     
Win32.     ,     . 
    Unicode-  ANSI-  Win32 
      ,   2  CreateWindowEx:   
  Unicode,    ANSI.  ,     
   : 

    590 ___________________________Windows   

    HWND WINAPI CreateWindowExW(DWORD dwExStyle, LPGWSTR IpClassName, 
    LPCWSTR IpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int 
nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hinstance, LPVOID IpParam); 
    HWND WINAPI CreateWindowExA(DWORD dwExStyle, LPCSTR IpClassName. 
    LPCSTR IpWindowName, DWORD dwStyle, int X, int Y, int nWidth. int nHeight, 
HWND hWndParent, HMENU hMenu, HINSTANGE hinstance. LPVOID IpParam): 
    CreateWindowExW   Unicode-.  W      
  wide ().  Unicode   16  
,       (wide characters).  
    CreateWindowExA ,      ANSI-. 
      CreateWindowExW  CreateWindowExA   ,  
  CreateWindowEx  ,    WINUSER.H: 

    tfifdef UNICODE 
    define CreateWindowEx CreateWindowExW 
    Seise 
    define CreateWindowEx CreateWindowExA 
    ftendif // !UNICODE 

       Create WindowEx  ,   , 
  UNICODE   .  16- 
Windows-  Win32, , ,    UNICODE.  
  CreateWindowEx     CreateWindowExA  
ANSI- .    ,  16- 
Windows    ANSI- CreateWindowEx. 
     Windows NT  Create WindowExA  ,   
     ANSI  Unicode   CreateWindowExW, 
   .  CreateWindowExW  , 
CreateWindowExA      . 
     DLL,      ,  
   2     ANSI   Unicode.  ANSI- 
  ,     Unicode-  
  . (    .) 
     Windows 95    CreateWindowExA.   
       Win32^yHKUH^ 
 Unicode-,       ANSI,   
  .   GetLastError  
ERROR_CALL_NOT_IMPLEMENTED.     ANSI- 
.       Windows 95,   
     \\[2-. 
      Win32 API (, WinExecnnn OpenFile)  
    16- ,    . 
    WinExec  OpenFile    CreateProcess  
CreateFile.  ,       . 
           ,     
  Unicode,          ANSI.   
,  Windows NT          
  ANSI-,   Unicode-. 

    ____________________________________ 17. Unicode 591 


    ,    ANSI,  Unicode 

            Unicode,   
       .  ,    : 
       ,       ,   
     char, 
         ( TCHAR  LPTSTR)  
   ; 
         ( BYTE  LPBYTE)  , 
     ; 
       _      ; 
         (, LPSTR  LPTSTR); 
          ,  
sizeof(szBuffer)   (sizeof(szBuffer) I sizeof (TCHAR)).   
          ,    . 
     -    ,   
  ,       ANSI. , 
   , ,  Unicode ,    , 
  ,    ,   
  Unicode,  ANSI.       
- ,           
   . 
         4   ,   
,          . 

       Win32 

    Win32 API       Unicode-: 

         

    Istrcat         . 
    Istrcmp       2     . 
    Istrcmpi       2     . 
    Istrcpy            . 
    Istrlen           . 

       ,   Unicode-,  ANSI- 
    ,   UNICODE    
. ,  UNICODE  , Istrcat   IstrcatA, 
   IstrcatW. 
     \32- Istrcmp  Istrcmpi    ,   
     (strcmp, strcmpi, wcscmp  wcscmpi), 
       .  
 ,        
       .  Istrcmp  
Istrcmpi    \32- Compares tring: 

    592 _____________________________Windows   

    int CompareString(LCID Icid, DWORD fdwStyle, LPCWSTR IpStringI, int cch1, 
LPCWSTR lpString2, int cch2): 

      2   Unicode.      
  (locale ID, LCID)  32- , 
  .     CompareString 
         .   
   ,    . 
         Istrcmp  CompareString,   
    32- GetThreadLocale: 

    LCID GetThreadLocale(VOID); 

         ,  
     . 
       CompareString  ,  
  .   : 

                             

    NORM_IGNORECASE              . 
    NORM_IGNOREKANATYPE           . 
    NORM_IGNORENONSPACE     ,   , . 
    NORM_IGNORESYMBOLS       ,   -, . 
    NORM_IGNOREWIDTH           -    
     . 
    NORM_STRINGSORT                , 
  -. 

     CompareString,  Istrcmp    fdwStyle , 
a Istrcmpi   NORM_IGNORECASE.  4   2   
 .  cch1  -1,  ,   IpStringI 
  ,     .   
    cch2  lpString2. 
              
Unicode-. ,  tolower  toupper   
    .   Unicode-   
 Win32.         ANSI-. 
      : 

    LPTSTR CharLower(LPTSTR IpszString); 
    LPTSTR CharUpper(LPTSTR IpszString); 

       ,        
.    ,    . , 
  ,  : 

    TCHAR cLowerCaseChr = ChatLower((LPTSTR) sz3tring[0]): 

         LPTSTR    16 
 ,     16    . , 
  16    0,  ,    
  ,    .  32- 
      16 . 

    ____________________________________ 17. Unicode 593 

            ,  
  ,    (    
 ): 

    DWORD CharLowerBuff(LPTSTR IpszString, DWORD cchString): 
    DWORD CharUpperBuff(LPTSTR IpszString, DWORD cchString): 

         (, isalpha, islower  
isupper)  ,  ,     
,      .  Win32    
,      ,    Control Panel: 

    BOOL IsGharAlpha(TCHAR ch); 
    BOOL IsCharAlphaNumeric(TCHAR ch); 
    BOOL IsCharLower(TCHAR ch); 
    BOOL IsCharUpper(TCHAR ch); 

           ,     
,  printf.    _UNICODE ,   
       Unicode;      ANSI. 
     \32- wsprintf   sprintfu3  
      ,  
      .     
 wsprintf        :   
ANSI,    Unicode. 

     

          , 
  .    ( ,  
 ,   . .)    Unicode.    
   UNICODE, Windows 95  Windows NT    
. ,      UNICODE  
,  LoadString      LoadStringA, 
         ANSI.   
  ANSI- . 

      

        Unicode   .   
,        
 Microsoft,   Unicode. , ,    
      . ,  ,  Notepad 
 Windows NT      Unicode-,   ANSI-. 
     ,      
(, ),   ,      
  ,     ANSI   Unicode.  Windows NT, 
   3.5,        IsTextUnicode: 
    DWORD IsTextUnicode(CONST LPVOID IpvBuffer, int cb, LPINT IpResult); 
         ,       
   .     , 
  

    594 ___________________________Windows   

      ANSI   Unicode.  IsTextUnicode   
   ,    
   .    ,   
,  ,        IsTextUnicode. 
      , IpvBuffer,   ,  . 
     void,  ,   
   . 
     cb     ,    
IpvBuffer.     , cb    ,  
 . :       .   
   ,      . 
       IpResnh    ,   
   .   ,   
  IsTextUnicode. (   . Microsoft Win32 
Programmer's Reference.)  IpResult  NULL,  IsTextUnicode 
  . 
      TRUE,  ,      Unicode, 
 FALSE    .    ,   
  IpResult,     ,  
(  )       
  . 

    VWINDOWS/ 
     Windows 95  IsTextUnicode       
 FALSE;   GetLastError    ERROR_CALL_NOTJMPLEMENTED. 

      IsTextUnicode  - FileRev 
(.  8). 

       Unicode  ANSI   

    \32- MultiByteToWideChar    
  : 

    int MultiByteToWideChar(UINT uCodePage, DWORD dwFlags, 
    LPCSTR IpMultlByteStr, int cchMultiByte, 
    LPWSTR IpWideCharStr, int cchWideChar): 

     uCodePage    ,   
 .  dwFlags     
   .     ,  dwFlags 
 0.  IpMultlByteStr    ,  
cchMultiByte     .    
 ,  cchMultiByte  -1. 
    Unicode- ,    , 
    ,    IpWideCharStr. 
    ( )    
cchWideChar.    0,    ,   
  ,     
.       Unicode- 
 : 
    1.  MultiByteToWideChar,  NULL   IpWideCharStr 
 0   cchWideChar. 
    1.   ,     
.       MultiByteToWideChar. 

    ___________________________________  17. Unicode 595 

    3.   MultiByteToWideChar,      
    IpWideCharStr,   ,   
    ,    cch WideChar. 
    4.    . 
    5.   ,  Unicode-. 
       Wn-132- WideCharToMultiByte: 

    int WideCharToMultiByte(UINT uCodePage. DWORD dwFlags, 
    LPCWSTR IpWideCharStr, int cchWideChar, 
    LPSTR IpMultiByteStr, int cchMultiByte, 
    LPCSTR IpDefaultChar, LPBOOL IpfUsedDefaultChar); 

        MultiByteToWideChar.   uCodePage  
      .  
      dwFlags.    
       ,     
.      ,  dwFlags 
 0. 
     IpWideCharStr    ,  
cchWideChar     .      
,  cchWideChar  -1. 
      ,    , 
  ,     IpMultiByteStr.  
cchMultiByte       .  
   cchMultiByte,      , 
   .      
     ,     . 
    ,  ,  WideCharToMultiByte   2  
,  MultiByteToWideChar,  IpDefaultChar  IpfUsedDefaultChar. 
 WideCharToMultiByte  ,     
,     ,    uCodePage. 
   ,   ,    
IpDefaultChar.     NULL (   ),  
    .      
,        ,     . 
     IpfUsedDefaultChar     BOOL,  
   TRUE,       
      .     
 ,     FALSE.   
 NULL   . 
            Microsoft Win32 
Programmer's Reference. 
          ANSI-  Unicode-  
,   . ,    DLL,  , 
       . Unicode- 
      : 

    BOOL StringReverseW (LPWSTR IpWideCharStr) { 
    //        
    LPWSTR IpEndOfStr = IpWideCharStr + wcslen(lpWideCharStr) - 1; 
    wchar_t cCharT; 

    . . . 

    596 _____________________________Windows   

    // ,       
    while (IpWideCharStr < IpEndOfStr) { 
    //      
    cCharT = IpWideCharStr; 
    //       
    IpWideCharStr = *lpEndOfStr; 
    //        
    //   
    IpEndOfStr = cCharT; 
    //   1   
    !pWideCharStr++ 
    //   1   
    IpEndOfStr: 
    //  :     
    return(TRUE); 
    } 

    ANSI-     ,      
,    ANSI-  Unicode     
 StringReverseW;        ANSI. 
     : 

    BOOL StringReverseA (LPSTR IpMultiByteStr) { 
    LPWSTR IpWideCharStr: 
    int nLenOfWideCharStr; 
    BOOL fOk = FALSE; 
    //   ,   
    //     
    nLenOfWideCharStr = MultiByteToWideChar(CP_ACP, , 
    IpMultiByteStr, -1, NULL, ): 
    
    //      , 
    //     . 
    //  ,  MultiByteToWideChar  
    //  ,   ,    
    //       . 
    IpWideCharStr = HeapAlloc(GetProcessHeap(), , 
    nLenOfWideCharStr * sizeof(WCHAR)); 
    if (IpWideCharStr == NULL) 
    return(fOk): 
    
    //      
    MultiByteToWideChar(CP_ACP, 0, IpMultiByteStr, -1, 
    IpWideCharStr, nLenOfWideCharStr); 


    ___________________________________ 17. Unicode 597 


    //      
    //     
    f0k = StringReverseW(lpWideCharStr); 
    if (f0k) { 
    //       
    WideCnarToMultiByte(CP_ACP, 0. IpWideCharStr, -1, 
    IpMultiByteStr, strlen(lpMultiByteStr), NULL, NULL); 
    } 
    //  ,     
    HeapFree(GetProcessHeap(), 0, IpWideCharStr); 
    return(fOk); 

    , ,   ,    DLL,  
    : 

    BOOL StringReverseW (LPWSTR IpWideCharStr): 
    BOOL StringReverseA (LPSTR IpMultiByteStr); 
    Bifdef UNICODE 
    Sdefine StringReverse StringReverseW 
    ftelse 
    ftdefine StringReverse StringReverseA 
    #endif // !UNICODE 


    Windows NT:     

       ,       
,       .   
 ( WM_SETTEXT)  IParam    . 
     ,     
    ,     ANSI   Unicode. 
        ,      
 .     WNDCLASS   RegisterClassA, 
 ,          ANSI.   
    RegisterClassW, ,    
Unicode.  RegisterClass,  ,    RegisterClassA, 
  RegisterClassW     ,   UNICODE  
  . 
      ,  ,      
  .   : 

    BOOL IsWindowUnicode(HWND hwnd); 

          Unicode,   
 TRUE; 
        FALSE. 
         ANSI    WM_SETTEXT ,  
  Unicode,      
 .   ,   IsWindowUnicode  
 - . 
            
 . ,      (edit control)  

    598 _____________________________Windows   

        Unicode.  -      
      : 

    LONG SetWindowLongA(HWND hwnd, int nindex, LONG INewLdng); 

     

    LONG SetWindowLongW(HWND hwnd, int nindex, LONG INewLong); 

     GWL_WNDPROC   nindex      
 INewLong.           
ANSI?     .   ,  
   ,  ,     
.  SetWindowLongA,     ,   
  (  )  ANSI-.  
,  IsWindowUnicode  SetWindowLongA,   ,  
  FALSE, ,       
    Unicode. 
        :  ,   
       ?   
 ,     .     
   .       
CallWindowProcA  CallWindowProcW: 

    LRESULT CallwinddwProcA(WNDPROC wndprcPrev, HWND hwnd, 
    UINT uMsg, WPARAM wParam, LPARAM IParam); 
    LRESULT CallWindowProcW(WNDPROC wndprcPrev, HWND hwnd, 
    UINT uMsg, WPARAM wParam, LPARAM IParam): 
    
            
ANSI-,    CallWindowProcA.      
Unicode-,   CallWindowProcW. 
         ,    . 
       .   
 SetWindowLongA  SetWindowLongW,  ,    
ANSI-   Unicode-  .    
  , SetWindowLong      
.      , SetWindowLong    
    \32-. 
             
, ,   : ANSI  Unicode.   
 CallWindowProc,  ,   :   
        .  
   ,   ,   
    .       
 , ,   ,   
 .