LPTSTR

LPTSTR

由於Win32 API文檔的函數列表使用函數的常用名字(例如, SetWindowText"),所有的字元串都是用TCHAR來定義的。(除了XP中引入的只適用於Unicode的API)。

LPTSTR解釋


表示指向字元/字元串的指針。WINDOWS 下面的程序設計可以支持MBCS和UNICODE兩種編碼的字元串,具體用那種就看你定義了MBCS宏還是UNICODE宏。MBCS宏對應的字元串指針 是char*也就是LPSTR,UNICODE對應的指針是unsigned short*也就是LPWSTR,為了寫程序方便微軟定義了類型LPTSTR,在MBCS下它就是char*,在UNICODE下它是unsigned char*,這樣你就可以重定義一個宏進行不同字符集的轉換了。
LP:長指針(long pointer)。
T:win32環境中有一個_T宏,用來標識字元是否採用Unicode編碼(兩位元組表示一個字元),若程序中定義了Unicode,該字元/字元串被作為Unicode字元串,否則就是標準的ANSI(單位元組表示一個字元)字元串。
STR:表示這個變數是一個字元串。
(1)直接賦值
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText = lpszText;
::MessageBox( NULL, strText , _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)CString::Format()格式化
CString strText;
LPTSTR lpszText = _T("LPTSTR >> CString");
strText.Format( _T("%s"), lpszText );
::MessageBox( NULL, strText , _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(1)強制轉換
CString strText( _T("This is a test") );
LPTSTR lpszText =(LPTSTR)(LPCTSTR)strText;
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(2)使用lstrcpy()
CString strText( "This is a test" );
LPTSTR lpszText = new TCHAR[strText.GetLength()+1];
lstrcpy( lpszText, strText );
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
(3)使用CString::GetBuffer()
CString strText(_T("This is a test "));
LPTSTR lpszText = strText.GetBuffer();
strText.ReleaseBuffer();
::MessageBox( NULL, lpszText, _T("標題"), MB_ICONASTERISK|MB_TASKMODAL|MB_OK );
/* char * 轉換成 CString
char chArray[] = "This is a test";
char * p = "This is a test";
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
/* CString轉換成char*
1.
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
2.
CString s(_T("Char test "));
LPTSTR p = s.GetBuffer();
LPTSTR dot = strchr(p, ''.'');
// 在這裡添加使用p的代碼
if(p != NULL)
*p = _T('');
s.ReleaseBuffer();

c++中LPTSTR


LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t區別
L表示long指針,這是為了兼容Windows 3.1等16位操作系統遺留下來的,在win32中以及其他的32位操作系統中, long指針和near指針及far修飾符都是為了兼容的作用,沒有實際意義。即win32中,long,near,far指針與普通指針沒有區別,LP與P是等效的。
P表示這是一個指針。
T表示_T宏,這個宏用來表示你的字元是否使用UNICODE, 如果你的程序定義了UNICODE或者其他相關的宏,那麼這個字元或者字元串將被作為UNICODE字元串,否則就是標準的ANSI字元串。
STR表示這個變數是一個字元串。
C表示是一個常量,const
LPTSTR:
如果定義了UNICODE宏則LPTSTR被定義為LPWSTR。typedef LPTSTR LPWSTR;
否則LPTSTR被定義為LPSTR。 typedef LPTSTR LPSTR;
下面列出一些常用的typedefs:
類型 MBCS Unicode
WCHARwchar_twchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTRwchar_t* wchar_t*
LPCWSTR constwchar_t* const wchar_t*
TCHAR charwchar_t
LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)
LPCTSTR const TCHAR* const TCHAR*
所以結論,在VS2005系統中,為提高可移植性,定義字元串時用TCHAR,轉化為UNICODE時用_T而不用L。