先说是什么:
wchar_t是unicode下的字符类型;
TCHAR在unicode下表示wchar_t,否则就是ANSI编码表示char;
_T("")同时支持unicode和ANSI字符串;
LPCTSTR 是常量字符串指针。
LPTSTR 是字符串指针。
解释
用char存储字符时,英文占用一个字节,中文占两个字节。假如一串字符串中同时有英文字符和中文字符,从中任选两个字节,这是两个英文字符,还是一个中文字符?unicode 编码就是为了解决这个问题。unicode不管中文英文都用两个字节表示,数据类型名为wchar_t(typedef定义)。
TCHAR(typedef定义)是为了同时支持unicode和ANSI编码,这个宏当项目定义为 unicode 时表示 wchar_t,否则表示 char。
_T("")是一个宏,用来表示字符串,例如 _T("abc") 在项目为 unicode 时表示 L"str",否则ANSI表示 "str"。宏定义如下:
#define _T(x) __T(x)
#define __T(x) L ## x
LPCTSTR即:Long Pointer Const TCHAR STRing。其中TCHAR即上面解释的。
Long指针是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
LPTSTR没有C(const)。