複製鏈接
請複製以下鏈接發送給好友

LPCWSTR

鎖定
LPCWSTR是一個指向unicode編碼字符串的32位指針,所指向字符串是wchar型,而不是char型。
中文名
LPCWSTR
外文名
LPCWSTR
實    質
Unicode Character
特    指
編碼字符串的32位指針

LPCWSTRMSDN 原文

An LPCWSTR is a 32-bit pointer to a constant string of 16-bit Unicode Charactor, which may be null-terminated.
This type is declared as follows:
typedef const wchar_t* LPCWSTR;

LPCWSTR簡要解釋

該類型是如下聲明的:
typedef const wchar_t* LPCWSTR;
因為在VS2005以後,編碼方式默認為Unicode,部分函數在使用時默認調用Unicode方式(函數名+W,exp:MessageBox+W=MessageBoxW),而非ANSI方式(函數名+A,exp:MessageBox+A=MessageBoxA)。
請看winuser.h中的聲明如下:
WINUSERAPI
int
WINAPI
MessageBoxA(
__in_opt HWND hWnd,
__in_opt LPCSTR lpText,
__in_opt LPCSTR lpCaption,
__in UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
__in_opt HWND hWnd,
__in_opt LPCWSTR lpText,
__in_opt LPCWSTR lpCaption,
__in UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif
上述聲明的意思是,在unicode編碼下MessageBox被編譯為MessageBoxW,否則就編譯為MessageBoxA。而兩者的區別則看函數聲明中參數2、3就可以明白了。

LPCWSTR關於錯誤

如果遇到參數錯誤(cannot convert parameter * from 'const char [**]' to 'LPCWSTR'),可以考慮察看聲明,如果有ANSI方式的只要在函數後面加個A就可以了,或者在定義參數時把char*改為WCHAR*。
如果是混合使用的,那可以考慮轉化,方法很多,比如使用TEXT()對字符串常量進行轉化。
在VS2012以後的版本中默認是使用Unicode的,所以會出現很多以前版本沒有的編譯錯誤(實參與形參類型不匹配)。