因此,我有一个简短的问题:如何让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*。
谢谢。
发布于 2011-02-19 03:34:15
,是的,我正在使用unicode字符集。
则无法使TCHAR与char兼容。因为如果你使用的是UCS,那么TCHAR就是wchar_t,类型char与wchar_t没有任何关系。你可以做一些工作来转换字符串(例如使用WideCharToMultiByte),但是这样你就会失去对Unicode的支持。
发布于 2011-02-19 03:34:43
TCHAR可以是wchar_t或char,这取决于是否定义了宏UNICODE。
UNICODE,则TCHAR表示wchar_t。在这种情况下,您不能用TCHAR代替char,也不能与它一起使用。它是dangerous!TCHAR就是char。在这种情况下,您可以使用TCHAR来代替char,也可以与之一起使用。毕竟,它们现在是一样的。发布于 2011-02-19 03:38:20
编写一个从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 )。
https://stackoverflow.com/questions/5045692
复制相似问题