LPCTSTR、TCHAR、BSTR

LPCTSTR

L:表示long指针,主要是为了兼容

P:表示这是一个指针

C:表示这是一个常量

T:表示在Win32环境中,有一个_T宏

STR:表示这个变量是一个字符串

这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。

所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。

在ANSI情况下,LPCTSTR就是const char*

在ANSI情况下,LPTSTR就是char*

在程序中我们大部分时间要使用带T的类型定义。

  LPCTSTR == const TCHAR *

CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。

如果你需要一个const char*却只有CString时,你可以LPCTSTR()来进行隐式的类型转换。const char *p=(LPCTSTR)str;

如果你需要一个CString却只有const char*时,直接调用CString的构造函数就行。CString str(p);

TCHAR

这个和上面是一样的道理

 因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和wstrlen,分别用于处理两种字符串

  微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数

  为了存储这样的通用字符,就有了TCHAR:

  当没有定义_UNICODE宏时,TCHAR = char,_tcslen = strlen

  当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wstrlen

TCHAR可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

BSTR

它被描述成一个与自动化相兼容的类型,由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码。因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。

COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。   

●C++ 字符串是以0结束的ASCII或Unicode字符数组。   

●Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。   

●Java字符串是以0结束的Unicode字符数组。   

需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言。在C++中,就是BSTR。

posted on 2011-05-26 16:22  数据化  阅读(1515)  评论(0编辑  收藏  举报