Запуск нового Приложения Windows: я должен использовать _TCHAR или wchar_t для текста?

Я закончил тем просто, что открыл веб-страницу в браузере. Тем путем я не должен даже волноваться об этом. Все еще странно, что это бросает эту ошибку все же.

5
задан Community 23 May 2017 в 12:07
поделиться

5 ответов

Нет, нет. Просто используйте wchar_t.

TCHAR полезен только в том случае, если вы хотите использовать переключатель условной компиляции для преобразования вашей программы для работы в режиме ASCII. Поскольку Windows 2000 и выше являются платформами Unicode, этот переключатель не имеет значения. Вместо этого вы бы намекнули другим разработчикам в своем проекте, что ASCII является допустимой целью, хотя на самом деле это не так.

13
ответ дан 18 December 2019 в 06:51
поделиться

wchar_t - это тип, определенный в C ++, то есть 16-битный в Visual Studio, но 32-битный в различных компиляторах gcc. Он всегда может содержать кодовую точку Unicode.

TCHAR и _TCHAR не являются символами «unicode» - они предназначены для использования в коде, который может быть скомпилирован и / или использован в Unicode OR Ansi программы:

_TCHAR - это, судя по первому знаку подчеркивания, "расширение" библиотеки времени выполнения Microsoft C до стандарта C ++. _TCHAR будет, когда _UNICODE будет 16-битным символом, когда _MBCS определен, будет многобайтовым символом, а когда ни один не определен, будет однобайтовым. характер. Используйте этот тип, если вы используете определенные строковые функции MS CRT с префиксом _t : _tcscpy () , например, является заменой для strcpy () / wcscpy () .

TCHAR определяется Win32 API. Этот тип представляет собой CHAR , когда UNICODE не определен, и WCHAR , когда определен UNICODE (обратите внимание на отсутствие подчеркивания на этот тип). Функции Windows API, которые принимают строки, также ожидают строк WCHAR в сборках UNICODE и строк CHAR в сборках, отличных от Unicode.

В итоге:

  • wchar_t - это кроссплатформенный тип, определенный в C ++, который может содержать кодовую точку Unicode - на компиляторах, отличных от Microsoft, часто имеет ширину 32 бита.
  • _TCHAR - это определенный Microsoft тип, который связан с _tcs * c функциями времени выполнения, которые изменяют свой тип на основе определения _UNICODE и / или _MBCS .
  • TCHAR - это тип, определенный в Windows API, который меняет свой тип в зависимости от определения (или нет) UNICODE .
  • WCHAR - это собственный Windows API тип для работы со строками Unicode. При использовании набора инструментов GCC для создания кода Windows ширина будет 16 бит, тогда как wchar_t - нет.

Это поможет? Не знаю.

  • WCHAR - это собственный тип Windows API для работы со строками Unicode. При использовании набора инструментов GCC для создания кода Windows ширина будет 16 бит, тогда как wchar_t - нет.
  • Это поможет? Не знаю.

  • WCHAR - это собственный тип Windows API для работы со строками Unicode. При использовании набора инструментов GCC для создания кода Windows ширина будет 16 бит, тогда как wchar_t - нет.
  • Это поможет? Не знаю.

    8
    ответ дан 18 December 2019 в 06:51
    поделиться

    Я бы выбрал простой wchar_t

    Преимущество TCHAR в том, что он позволяет вам включать и выключать Unicode, а ваш код получает доступ к Windows API будет продолжать работать.

    Проблема в том, что никакой другой API его не примет.

    std :: cout будет подавляться std :: wstring , std :: string задохнется при инициализации с помощью wchar_t * и т. Д.

    С точки зрения любой другой библиотеки, вы должны использовать либо char , либо wchar_t , и переключение между ними нетривиально.

    А поскольку несовместимость с Unicode была проблемой только в Windows 95, на самом деле нет смысла поддерживать и то, и другое. Включите Unicode, используйте wchar_t и избавьте себя от головной боли.

    Конечно, чтобы избежать путаницы, вы можете также вызвать * W-версии функций Win32. Вместо CreateWindow, например, CreateWindowW, чтобы даже если кто-то скомпилирует ваш код с отключенным Unicode в настройках проекта, код все равно будет работать. Если вы собираетесь жестко кодировать поддержку Unicode, вы можете делать это последовательно.

    4
    ответ дан 18 December 2019 в 06:51
    поделиться

    Используйте TCHAR. Он открывает ваше приложение как для сценариев развертывания UNICODE, так и для сценариев без UNICODE. Конечно, есть больше проблем со строковыми разговорами и использованием стандартных функций обработки строк.

    -2
    ответ дан 18 December 2019 в 06:51
    поделиться

    Если вы всегда компилируете свое приложение для Unicode во время его разработки, ЭТО НЕ БУДЕТ РАБОТАТЬ при компиляции для строк ANSI, даже если оно переполнено ТКПЧ. (За исключением игрушечных приложений.)

    Именно это имел в виду ДжаредПар, когда сказал, что ANSI не является допустимой целью. Если вы хотите поддерживать версии Unicode и ANSI, вы можете использовать для этого TCHAR, но простое использование TCHAR и других T не приведет вас к этому - вам нужно активно создавать и поддерживать обе версии. Определенно не стоит того для большинства приложений.

    0
    ответ дан 18 December 2019 в 06:51
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: