首先char*   是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。  
   
  LP的含义是长指针(long   pointer)。LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。而 LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。  
   
  为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。  
   
  LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。  
   
  然后为了实现两种编码的通用,提出了TCHAR的定义:  
  如果定义_UNICODE,声明如下:  
  typedef   wchar_t   TCHAR;  
  如果没有定义_UNICODE,则声明如下:  
  typedef   char   TCHAR;  
   
  LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。  
   
  CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。  
   
  如果您还需要进一步的信息,请参看http://msdn.microsoft.com/library/default.asp?url= /library/en-us/vclib/html/_crt_data_type_mappings.asp等其他有关信息。  
   
 ////////////////////////////////////////////////////////////////////////////////////////////////

解决方案 »

  1.   

    以上帖子出自yanglin的个人网站  
    http://yanglin.unionabc.com,特此声明
      

  2.   

    可以这样理解:
    typedef wchar_t WCHAR;#ifdef UNICODE //不是_UNICODE
     typedef char TCHAR;
    #else
     typedef WCHAR TCHAR;
    #endiftypedef char* LPSTR;
    typedef const char* LPCSTR;
    typedef WCHAR* LPWSTR;
    typedef const WCHAR* LPCWSTR;
    typedef TCHAR* LPTSTR;
    typedef const TCHAR* LPCTSTR;char是8位有符号整数(8位都有效),wchar_t是16位无符号整数。
    其中const表示该指针指向的数据不允许修改。