//
// Neutral ANSI/UNICODE types and macros
//
#ifdef UNICODE // r_winnt
#ifndef _TCHAR_DEFINED
typedef WCHAR TCHAR, *PTCHAR
typedef WCHAR TBYTE , *PTBYTE
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef LPWCH LPTCH, PTCH
typedef LPWSTR PTSTR, LPTSTR
typedef LPCWSTR PCTSTR, LPCTSTR
typedef LPUWSTR PUTSTR, LPUTSTR
typedef LPCUWSTR PCUTSTR, LPCUTSTR
typedef LPWSTR LP
#define __TEXT(quote) L##quote // r_winnt
#else /* UNICODE */ // r_winnt
#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR
typedef unsigned char TBYTE , *PTBYTE
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef LPCH LPTCH, PTCH
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR
#define __TEXT(quote) quote // r_winnt
#endif /* UNICODE */// r_winnt
#define TEXT(quote) __TEXT(quote) // r_winnt
LPCTSTR类型:LP:long型指针,这是为了兼容Windows 3.1等16位 *** 作系统遗留下来的,在win32中以及其他的32为 *** 作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
C:常量;
T:和_T含义一样,应该是UNICODE型;
STR:字符串
再看看LPCTSTR的定义:
以下摘自 MS的头文件
// ANSI (Multi-byte Character) types
typedef CONST CHAR *LPCSTR, *PCSTR
#ifdef UNICODE // r_winnt
typedef unsigned short WCHAR// wc, 16-bit UNICODE character
typedef CONST WCHAR *LPCWSTR, *PCWSTR
typedef LPCWSTR LPCTSTR
typedef LPCSTR LPCTSTR
如果没有定义UNICODE,LPCTSTR实际上就是CONST char *
如果定义了UNICODE,LPCTSTR实际上变成了CONST unsigned short
所以char *和LPCSTR可以强制转换
char* p
LPCTSTR lp
p = (LPSTR)lp
用CString或WideCharToMultiByte来处理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)