LPTSTR解釋
與char*等價,表示普通字元/字元串變數,指向字元/字元串的指針。
LP:長指針(long pointer)。
T:win32環境中有一個_T宏,用來標識字元是否採用Unicode編碼(兩位元組表示一個字元),若程式中定義了Unicode,該字元/字元串被作為Unicode字元串,否則就是標準的ANSI(單位元組表示一個字元)字元串。
STR:表示這個變數是一個字元串。
/* LPTSTR 轉換成 CString */
(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 );
/* CString 轉換成 LPTSTR */
(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
WCHAR wchar_t wchar_t
LPSTR char* char*
LPCSTR const char* const char*
LPWSTR wchar_t* wchar_t*
LPCWSTR const wchar_t* const wchar_t*
TCHAR char wchar_t
LPTSTR TCHAR*(或char*) TCHAR* (或wchar_t*)
LPCTSTR const TCHAR* const TCHAR*
由於Win32 API文檔的函式列表使用函式的常用名字(例如, SetWindowText"),所有的字元串都是用TCHAR來定義的。(除了XP中引入的只適用於Unicode的API)。所以結論,在VS2005系統中,為提高可移植性,定義字元串時用TCHAR,轉化為UNICODE時用_T而不用L。