#ifdef UNICODE
#define LPCTSTR LPCWSTR
#else
#define LPCTSTR LPCSTR
#endif
LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information,
LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information
LPCTSTR类型
如何理解LPCTSTR类型?
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。(即字符串是ansi还是unicode的区分是由宏_T来决定的,字符串如果由宏_T定义,那么编译时如果是使用unicode方式编译,那么字符串就以unicode的宽字节字符保存,如果以ANSI编译则_T不起任何作用。_T()和_L()的区别在于,_L不管你是以什么方式编译,一律以以 UNICODE方式保存。
Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
)STR表示这个变量是一个字符串
所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。
LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。
如果工程字符集为ANSI情况下,LPCTSTR 就是 const char*(ansi), 是常量字符串(不能修改的)。
而LPTSTR 就是 char*, 即普通字符串(非常量,可修改的)。
如果工程字符集为UNICODE情况下,LPCTSTR就是 const wchar_t *(unicode),而LPTSTR就是wchar_t*
转换方法:
LPWSTR->LPTSTR: W2T();
LPTSTR->LPWSTR: T2W();
LPCWSTR->LPCSTR: W2CT();
LPCSTR->LPCWSTR: T2CW();
ANSI->UNICODE: A2W();
UNICODE->ANSI: W2A();