2009-02-11 29 views
2

我有一個C++庫,我將其交付給其他開發人員。其中一個需要i18​​n,所以他問我是否可以將L前綴添加到API中的字符串中。Windows上的Unicode基礎知識

我不知道很多關於國際化,所以我有一些基本問題:

  1. 當我編譯我使用Unicode lib下,可以將其他開發者使用這個版本像往常一樣?或者,開發人員是否也將其Visual Studio設置更改爲使用unicode?

  2. 當我用Unicode編譯我的庫時,是否需要更改頭文件和.cpp文件中的所有字符串?或者是否足夠將L前綴添加到頭文件中的字符串?

在此先感謝!

Paul

回答

3

添加將L前綴改變從一個char陣列串入一個short陣列。更好的選擇是包裝您的所有字符串與「文本」的宏,即

TEXT("My string") 

如果你的版本是一個Unicode生成所有字符串成爲short秒的陣列,但如果沒有,他們仍然作爲數組char s。 Windows還提供以下類型:

LPWSTR = short * 

LPTSTR = short *, or char * if UNICODE not defined 

LPSTR = char * 

不要忘了;即使您已將L加上了前綴或將TEXT包裝爲字符串,但您仍需確保調用正確的功能。如果定義了UNICODE,則標準Windows字符串API(如lstrlen)會自動從char *切換到short *,但您需要確保沒有使用僅使用char *的函數。

您的庫導出的使用字符串的函數也會破壞使用您的庫的舊應用程序,因爲這些應用程序仍然會傳遞,並且數組爲char s而不是short s,因此您可能需要以某種形式向後兼容。

+0

L前綴使字符串成爲wchar_t數組,不短。 混淆可能來自這樣一個事實,即在舊的MSVC6中,wchar_t不是本地類型,而只是簡短的typedef(或者它是無符號短嗎?) – 2009-02-11 21:41:24