本文目录
- LPCTSTR, LPCTSTR, DWORD, HWND, HMENU,HANDLE,LPVOID什么意思,这是哪里面定义的关键字啊
- lpctstr和字符串怎么比较
- LPCTSTR和LPTSTR和char *究竟有什么区别
- VC++中的lpctstr,uint是什么意思啊
- LPCTSTR是什么啊lptstr又是什么lptstr是数据类型吗
- lpctstr是什么类型
- 如何将LPCTSTR类型数据转换成char数组
- C++ string 转化为LPCTSTR
- 为什么LPCTSTR类型的参数可以用字符串代替
- LPCTSTR怎么用
LPCTSTR, LPCTSTR, DWORD, HWND, HMENU,HANDLE,LPVOID什么意思,这是哪里面定义的关键字啊
都是MFC中的基本数据类型,比如LPCTSTR是一个指向字符串的长指针,HWND是一个窗口的句柄,HANDLE就是句柄的意思,HWND就是其中的一种,LPVOID是无类型指针,可以去查查MSDN获得具体的信息,而且这些东西都是可以推断出来的,比如LP-前缀就是长指针的意思。
lpctstr和字符串怎么比较
CString LPCTSTR区别联系
CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。
CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。
typedef OLECHAR FAR* BSTR;
typedef const char * LPCTSTR;
vc++中各种字符串的表示法
首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。
LP的含义是长指针(long pointer)。LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。
1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.
LPCTSTR和LPTSTR和char *究竟有什么区别
LPSTR = char*
LPCSTR = const char*
LPTSTR:
如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char*
LPCTSTR:
如果定义了UNICODE宏,那么LPCTSTR = const wchar_t*,否则LPCSTR = const char*
告诉你方法,
“LP“前缀是历史遗留的,在Win32下就是 P ,代表指针的含义。
“C“代表const
“T“的含义就是如果定义了UNICODE,它就是宽字符版本,否则就是Ansi版本。
完整定义如下:
//Unicode 版本
typedef wchar_t WCHAR;
typedef WCHAR *PWCHAR;
typedef WCHAR *LPWCH, *PWCH;
typedef CONST WCHAR *LPCWCH, *PCWCH;
typedef WCHAR *NWPSTR;
typedef WCHAR *LPWSTR, *PWSTR;
typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
typedef CONST WCHAR *LPCWSTR, *PCWSTR;
typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
// Ansi版本
typedef CHAR *PCHAR;
typedef CHAR *LPCH, *PCH;
typedef CONST CHAR *LPCCH, *PCCH;
typedef CHAR *NPSTR;
typedef CHAR *LPSTR, *PSTR;
typedef CONST CHAR *LPCSTR, *PCSTR;
#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
typedef LPWSTR LPTCH, PTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;
typedef LPWSTR LP;
#else
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
typedef LPSTR LPTCH, PTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
#endif
-lpctstr
VC++中的lpctstr,uint是什么意思啊
*****
*****在vc中写入这么一条语句:
MessageBox(NULL,
LPCTSTR(“内容“),
LPCTSTR(“标题“), MB_OK);
选中关键字LPCTSTR,右击查看定义,跳到如下一行:
typedef LPCSTR LPCTSTR;
再右击关键字LPCSTR,跳到如下一行:
typedef CONST CHAR* LPCSTR;
清楚了吧,lpctstr这种数据类型本质上就是一个常量字符串指针类型,它只是一个别名。
*****
*****同理,uint本质上是unsigned int类型,只是一个别名而已。
-lpctstr
LPCTSTR是什么啊lptstr又是什么lptstr是数据类型吗
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
-lpctstr
lpctstr是什么类型
字符串常量
LPCTSTR类型:
L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
STR表示这个变量是一个字符串
http://baike.baidu.com/link?url=yjwh0ezLbqHL7n3J3jHRTr2PohUpmO4jpPLpCVyNf-54vi97MoVQzWHM2GNM4x9fI3MKiScB191jtIYtoDHu2a
-lpctstr
如何将LPCTSTR类型数据转换成char数组
首先,我们看LPCTSTR的定义(VC/MFC的源代码中可以找到,这里为了便于理解,简化一下):
1
2
3
4
5
6
7
#ifdef UNICODE
typedef unsigned short TCHAR
typedef const unsigned short LPCTSTR;
#else /* UNICODE */
typedef char TCHAR
typedef const char *LPCSTR
#endif /* UNICODE */
从这里我们可以看出,在非UNICODE模式下,LPCTSTR就是char* 的常量指针,而UNICODE下,是双字节常量指针。
拆解LPCTSTR的定义,LP代表“远”指针(参考C/C++指针定义),C代表const常量,T代表TCHAR可变字符,STR代表string字符串,综合起来,就是可变字符常量指针。
因此在非UNICODE下,我们可以直接将char数组通过强制转换变成LPCTSTR,但在UNICODE环境下,这是不行的:
1
2
char a = “123“;
LPCTSTR pStr = (LPCTSTR)a;
VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
1
2
3
4
//利用CString的运算符重载中的编码转换实现
char a = “123“;
CString cstr = a;
LPCTSTR pStr = LPCTSTR(cstr);
如果是常量字符串数组,我们可以直接使用_T(““)这个宏来实现:
1
LPCTSTR pStr = _T(“123“);
在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。
-lpctstr
C++ string 转化为LPCTSTR
C++ string 转化为LPCTSTR可以参考下面的代码:
string str = “hello“;
CString cstr(str.c_str());
MoveFile(cstr,.....); //CString 自动转为LPCTSTR
扩展资料:
C++ 中的 string 类
MFC中的CString类使用起来非常的方便好用,但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。-lpctstr
其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。
参考资料来源:百度百科-string
为什么LPCTSTR类型的参数可以用字符串代替
LPCTSTR
是
指向常字符串的32bit指针。
字符指针可以看成
1维字符数组
或
一个
常字符串,所以可以
用常字符串代替。
LPCTSTR怎么用
就是const char*这种类型。
因为是const的,不能直接输入,但是可以更换指向。
如:
LPCTSTR lps = “hehehehe“;
另外:
LPCTWSTR = const wchar_t*
const类型是常量类型,能输入吗?
但是你可以先新建一个char ch数组,
然后把其指针赋值给LPCTSTR,这和使用ch是一样的,你觉得这样有意义吗?
那不过是微软为了表述的方便而弄的一个typedef,用const char*也是一样的。。
难道你觉得用了那个就N了吗?
-lpctstr