2012-05-09 261 views

回答

5

其實__T用於打開字符串爲wchar_t *或字符*,在TCHAR.H您有:

#define __T(x)  L ## x 

當啓用UNICODE使用和

#define __T(x)  x 

當禁用

如果你的代碼是要在Unicode和非UNICODE編譯編譯使用:

TCHAR * SZ = __T(「我的文字」);

最WINAPI函數使用TCHAR *或一些形式的

其實我更喜歡_T()版本,從來不知道__T版本存在,在TCHAR.H的底部,你把它定義爲:

#define _T(x)  __T(x) 
#define _TEXT(x) __T(x) 

所以回到你的例子:

strcpy(codecName, __T(#CODEC)); \ 

等同於:

strcpy(codecName, "CODEC"); \ 

非Unicode構建和

strcpy(codecName, L"CODEC"); \ 

上UNICODE建立

非常重要!!:使用_T或__T是不是真的足夠,以確保您的代碼是UNICODE compilant。這將使調用WINAPI函數更容易。你必須準備好你的代碼來工作UNICODE。

+0

重要說明:此頭(和宏)特定於Windows,因爲它不使用UTF-8作爲Unicode。 –

+0

這不完全正確。首先,當然,'char'文本能夠成爲Unicode:認爲UTF-8。其次,只是改變一個宏並不會使你的代碼符合Unicode;不僅僅是字符類型是16位還是隻有8位。「TCHAR」這樣的東西實際上是一種欺詐行爲:虛假廣告,因爲它們無法提供他們承諾的東西。 –

+0

這就是你如何在Windows,Windows-CE下使用visual-C++編碼(僅適用於UNICODE)。沒有UTF-8,winapi函數接受char(你必須注意編碼)或wchar_t(2bytes UNICODE)。問題有一個標籤visual-C++,所以我想MS特定的答案是可以的。我認爲這是顯而易見的,但我添加了評論__T不會將您的應用程序變成unicode兼容代碼:) – marcinj

相關問題