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[]有没有出现乱码。
- LPTSTR
- LPTSTR
- 关于LPTSTR
- C++ LPTSTR
- dword LPTSTR
- LPTSTR解释
- LPTSTR CString 相互转换
- LPTSTR、LPCSTR、LPCTSTR、LPSTR
- LPTSTR 及字符串相关
- LPTSTR 转化为 WORD
- string 与 LPTSTR 转换
- LPCTSTR,LPTSTR 用法
- LPSTR,LPWSTR,LPCTSTR,LPTSTR
- LPCTSTR和LPTSTR区别
- LPCTSTR、LPSTR与LPTSTR
- vs2010下LPTSTR赋值
- LPTSTR、LPCSTR、LPCTSTR、LPSTR区别
- LPTSTR、LPCSTR、LPCTSTR、LPSTR区别
- struts2标签:According to TLD or attribute directive in tag file, attribute xxx does not accept any expressions
- 8月19日
- Why use a ProtocolCodecFilter
- PHPMailer 发送邮件(含详细介绍及使用方法说明)
- Play with SQL 之整理贴
- C++ LPTSTR
- 学习MINA之一
- C#创建用户控件:IPv4地址输入框
- 保留区
- Play with SQL 之整理贴
- Play with SQL 之整理贴
- java 读取html写入excel (htmlpaser,jxl)
- java实现手机发送信息(实例) xzhou
- jqGrid属性中文详细说明