所以一个简单的问题我如何使用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 *。
感谢。
答案 0 :(得分:3)
是的,我使用的是unicode字符集。
然后你不能让TCHAR与char兼容。因为如果你使用的是UCS,那么TCHAR就是wchar_t。 char
类型与wchar_t
无任何关系。你可以做一些工作来转换字符串(使用例如WideCharToMultiByte
),但是你将失去Unicode支持。
答案 1 :(得分:1)
TCHAR
可以是wchar_t
或char
,取决于是否定义了宏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进行了覆盖。