LPCWSTR

LPCWSTR是一個指向unicode編碼字元串的32位指針,所指向字元串是wchar型,而不是char型。

MSDN 原文

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是一個指向unicode編碼字元串的32位指針,所指向字元串是wchar型,而不是char型。

該類型是如下聲明的:

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就可以明白了。

關於錯誤

如果遇到參數錯誤(cannot convert parameter * from 'const char [**]' to 'LPCWSTR'),可以考慮察看聲明,如果有ANSI方式的只要在函式後面加個A就可以了,或者在定義參數時把char*改為WCHAR*。

如果是混合使用的,那可以考慮轉化,方法很多,比如使用TEXT()對字元串常量進行轉化。

在VS2012以後的版本中默認是使用Unicode的,所以會出現很多以前版本沒有的編譯錯誤(實參與形參類型不匹配)。

相關詞條

相關搜尋

熱門詞條

聯絡我們