Обеспечение совместимости TCHAR * с char * - PullRequest
0 голосов
/ 18 февраля 2011

Итак, быстрый вопрос, как мне заставить 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 ]

3 голосов
/ 18 февраля 2011

И да, я использую набор символов Unicode.

Тогда вы не сможете сделать TCHAR совместимым с char. Потому что если вы используете UCS, то TCHAR - это wchar_t. Тип char никак не связан с wchar_t. Вы можете выполнить некоторую работу по преобразованию строки (например, WideCharToMultiByte), но тогда вы потеряете поддержку Unicode.

1 голос
/ 18 февраля 2011

TCHAR может быть wchar_t или char, в зависимости от того, определен макрос UNICODE или нет.

  • Если макрос UNICODE определен, то TCHAR означает wchar_t. В этом случае вы не можете использовать TCHAR вместо или с char. Это опасно!
  • Если он не определен, то TCHAR означает char. В этом случае вы можете использовать TCHAR вместо или с char. В конце концов, они теперь такие же.
0 голосов
/ 18 февраля 2011

Написать конвертер из UTF-16 в UTF-8 (или использовать функцию Win32 API, если это то, что он делает).Сделайте его универсальным, чтобы он мог работать с char *, wchar_t *, std :: string и std :: wstring.Напишите шаблонную функцию string_cast и дайте компилятору выяснить второй параметр.Переопределите string_cast для различных комбинаций, которые вы будете использовать.Преобразование между TCHAR * в std :: string с помощью string_cast, и тогда не имеет значения, как определяется TCHAR (при условии, что вы переопределили для char и wchar_t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...