2011-02-18 79 views
0

所以,一個簡單的問題我如何使TCHAR *(或wchar_t作爲它的宏)與char *一起工作?使TCHAR *兼容char *

我正在使用unicode字符集。

,這是問題的代碼是:

TCHAR* D3DDevTypeToString(D3DDEVTYPE devType) { 
    switch (devType) { 
     case D3DDEVTYPE_HAL:  
     return TEXT("D3DDEVTYPE_HAL"); 
     case D3DDEVTYPE_SW:  
     return TEXT("D3DDEVTYPE_SW"); 
     case D3DDEVTYPE_REF:  
     return TEXT("D3DDEVTYPE_REF"); 
     default:     
     return TEXT("Unknown devType"); 
     } 
    } 

顯而易見的解決辦法是改變TCHAR *爲char *,但我想如果可能的話,以保持它作爲TCHAR *。

謝謝。

+0

這是什麼,你試圖在這裏實現? char? – 2011-02-18 19:34:57

+1

應該是`const TCHAR *`。 – Puppy 2011-02-18 19:59:09

回答

3

是的,我正在使用unicode字符集。

然後你不能讓TCHAR與char兼容。因爲如果你使用的是UCS,那麼TCHAR是wchar_t。 char類型與wchar_t沒有任何關係。你可以做一些工作來轉換字符串(例如使用WideCharToMultiByte),但是你會失去Unicode支持。

1

TCHAR可能是wchar_tchar,取決於是否定義宏UNICODE

  • 如果宏UNICODE被定義,則TCHAR裝置wchar_t。在這種情況下,您不能使用TCHAR代替char或使用char。這很危險!
  • 如果沒有定義,則TCHAR表示char。在這種情況下,您可以使用TCHAR代替char或使用char。畢竟,他們現在一樣。
0

寫一個轉換器從UTF-16到UTF-8(或者使用win32 API函數,如果是這樣的話)。使其通用,以便它可以在char *,wchar_t *,std :: string和std :: wstring上工作。編寫一個模板函數string_cast,讓第二個參數由編譯器計算出來。覆蓋您將使用的不同組合的string_cast。使用string_cast在TCHAR *與std :: string之間進行轉換,然後不管TCHAR是如何定義的(假設您覆蓋了char和wchar_t)