Я по-прежнему вижу советы по использованию типов LPTSTR
/TCHAR
и т. Д. Вместо LPWSTR
/WCHAR
. Я считаю, что материал Unicode был хорошо представлен на Win2k, и я откровенно не пишу код для Windows 98. (Разумеется, за исключением особых случаев.) Учитывая, что я не забочусь о Windows 98 (или, что еще меньше, ME), поскольку это десятилетняя ОС, есть ли причина использовать совместимость TCHAR
и т. Д. Типов? Почему бы еще посоветовать людям использовать TCHAR
- какая польза от него добавляется с помощью WCHAR
?Являются ли вызовы API Win32 по-прежнему актуальными?
ответ
Если кто-то говорит вам, чтобы идти до 1.000.000 линий, не _UNICODE C++, с большим количеством объявлений используя char
вместо wchar_t
или TCHAR
или WCHAR
, вам лучше быть готовым справиться с API, не Unicode Win32. Конверсия в больших масштабах является довольно дорогостоящей, и, возможно, это не то, за что готовы платить деньги за источник.
Что касается нового кода, ну, есть так много примеров кода там с помощью TCHAR, что может быть проще вырезать и вставить, и в некоторых случаях некоторые трения между WCHAR
в wchar_t
и WCHAR
как unsigned short
.
Кто знает, может быть, когда-нибудь MS добавит тип данных UTF-32 под TCHAR?
Интересный вопрос о возможности расширения TCHAR. Вряд ли, хотя UTF-32, скорее всего, займет значительно больше места на почти каждый кусок фактического текста. HTML5 полностью отвергает его как кодировку. – kibibu
@kib комментарий UTF-32 должен был быть юмористическим. – bmargulies
@bmargulies К сожалению:/ – kibibu
На самом деле, версии Unicode функций были введены с Win32 в 1993 году с Windows NT 3.1. Фактически, на основе oses на основе NT почти все функции * A просто преобразуются в Unicode и вызывают версию * W внутри. Кроме того, поддержка функций * W на 9x существует через Microsoft Layer for Unicode.
Для новых программ я бы определенно рекомендовал напрямую использовать макросы TCHAR или WCHAR. Я сомневаюсь, что MS будет добавлять поддержку любых других размеров персонажа во время жизни NT. Для существующих кодовых баз я полагаю, что это будет зависеть от того, насколько важно поддерживать Unicode и затраты на его исправление. Функции * A должны оставаться в Win32 навсегда для обратной совместимости.
Как и http://stackoverflow.com/questions/234365/is-tchar-still-relevant – dan04
Я не видел, чтобы разработчики предлагали использовать 'TCHAR's. Однако я видел, как разработчики предлагали быть последовательными. Если вы вызываете общую версию API (например, «CreateFile'), тогда вам нужно быть последовательным и передавать« LPCTSTR ». Вы уверены, что не смешиваете их? – IInspectable