C++ LPTSTR

来源:互联网 发布:gy手机自动关机软件 编辑:程序博客网 时间:2024/06/03 14:07

L表示long指针, 这是为了兼容Windows 3.1等16位操作系统遗留下来的, 在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。 

P表示这是一个指针,C表示是一个常量T在Win32环境中, 有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。STR表示这个变量是一个字符串。 

所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。LPCTSTR == const TCHAR *

LP和P在win32中是等效的,都是指针的意思。   
PTSTR的定义 typedef LPWSTR PTSTR, LPTSTR;
   STR表示字符串。   
   问题就出在T上面。   
   T是一个宏,当没定义unicode时为空,定义unicode后表示为宽字符。   
   所以当定义unicode后,PTSTR转换为PSTR(LPSTR,一样意思)就不能直接转换了,因为一个是unicode,一个是ascii   
   结论:unicode下,PTSTR转换为PSTR是个编码转换问题。   
   编码转换可以用MS的函数完成。   
   WideCharToMultiByte将unicode转换成ascii   
   MultiByteToWideChar将ascii转换成unicode

 

 

 

 

MSDN上的DataType上是这么说的,LPTSTR是什么呢?
#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif
而LPWSTR是针对wchar_t的,LPSTR是针对char的,
typedef CHAR *LPSTR;
typedef char CHAR;
可见如果没有定义UNICODE的话, char *就是LPTSTR,而const char *就是LPCTSTR,那个T表示的是TCHAR(char[ascii],wchar_t[UNICODE])。 
================
我的意思是如果你没有在命令喊使用“/D UNICODE”或者源码一开始“#define UNICODE”的话LPTSTR跟char *是一样的。你这里出现了乱码的话应该先看看你的char tmpDir[]有没有出现乱码。