TCHAR/_TCHAR: 是微软特有的通用文本数据类型,可以根据编译选项映射为Unicode字符、MBCS字符或是ANSI字符。使用这种字符类型编写的通用代码可以编译为Unicode、MBCS、ANSI三种字符集中的任何一种。
tchar.h是微软特有的C运行时库头文件,它定义了通用文本类型_TCHAR,当我们没有定义__STDC__预编译符号时(默认时,VC没有定义此符号),表示不需要遵从ANSI命名要求。在这中情况下,如果通用文本数据类型还没有定义,tchar.h文件也会定义另外一个符号TCHAR作为其别名。
winnt.h 是微软特定的Win32操作系统头文件,把通用文本数据类型定义为TCHAR。此文件是操作系统特定的,
简单的说:C运行时库定义了_TCHAR类型, 而Windows操作系统定义了TCHAR类型
规范点说明:
1、当编写基于Windows的COM组件时,在组件内部,通常我们应该使用TCHAR字符类型来表示组件内部使用的字符
2、与操作系统交互的所有字符也应该使用TCHAR
OLECHAR: 是COM使用的字符数据类型,用来描述COM在特定平台上使用的文本数据类型。COM中的文本字符串是以NUL字符结尾的OLECHAR字符数组,对应的字符串指针是LPOLESTR 和LPCOLESTR
COM接口方法的文本字符串参数应该用LPOLESTR 或LPCOLESTR
BSTR:COM组件使用的特殊字符串类型,它是一种带长度前缀、含OLECHAR字符数组的指针。特性如下:a、 它指向字符数组的第一个字符,长度是以整数存储在数组中紧接第一个字符前面的位置
b、字符数组以NUL字符结束
c、长度以字节为单位,而不是字符,不包括终止字符NUL
d、字符数组内部可能包括有效的NUL字符
e、必须使用SysAllocString和SysFreeString函数进行分配和释放
f、NULL的BSTR指针表示空字符串
g、BSTR是非引用计数,两次引用同一字符串的内容必须指向两个单独的BSTR。即:拷贝一个BSTR意味这字符串的复制操作,而不是简单的指针拷贝。
CComBSTR:BSTR的ATL封装类,将语义繁多的BSTR的细节封装成一个可重用类。其内部成员是一个BSTR类型的变量
规范点说明:
3、如果需要调用COM方法,并传递一些字符串,必须根据方法的参数向其传递OLECHAR或者BSTR字符串或OLECHAR*
4、如果是其他语言定义的接口,一般来说字符串类型应该是BSTR数据类型。
5、OLECHAR* 和BSTR不能等同使用,OLECHAR* 是以NUL结尾的字符串指针, 而BSTR是一个以NUL结尾但中间可能有一个或多个NUL字符的指针。