使TCHAR *与char *兼容

时间:2011-02-18 19:32:09

标签: c++ type-conversion

所以一个简单的问题我如何使用TCHAR *(或wchar_t作为它的宏)与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 *。

感谢。

3 个答案:

答案 0 :(得分:3)

  

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

然后你不能让TCHAR与char兼容。因为如果你使用的是UCS,那么TCHAR就是wchar_t。 char类型与wchar_t无任何关系。你可以做一些工作来转换字符串(使用例如WideCharToMultiByte),但是你将失去Unicode支持。

答案 1 :(得分:1)

TCHAR可以是wchar_tchar,取决于是否定义了宏UNICODE

  • 如果定义了宏UNICODE,则TCHAR表示wchar_t。在这种情况下,您无法使用TCHAR代替char或使用TCHAR。这很危险!
  • 如果未定义,则char表示TCHAR。在这种情况下,您可以使用char代替{{1}}或使用{{1}}。毕竟,他们现在一样。

答案 2 :(得分: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进行了覆盖。