Использование универсальных типов данных
Если в коде используются универсальные типы данных, их можно скомпилировать для Юникода , просто используя директиву препроцессора, чтобы определить "ЮНИКОД" перед операторами #include для файлов заголовков. Чтобы скомпилировать код для кодовой страницы Windows (ANSI), опустите определение UNICODE. Новые приложения Windows должны использовать Юникод, чтобы избежать несоответствий различных кодовых страниц и упростить локализацию.
Чтобы создать исходный код, который можно компилировать либо для использования символов и строк Юникода, либо для использования символов и строк из кодовых страниц Windows:
Используйте универсальные типы данных, такие как TCHAR, LPTSTR и LPTCH, для всех символьных и строковых типов, используемых для текста. Дополнительные сведения об универсальных типах см. в статье Типы данных Windows для строк.
Убедитесь, что указатели на нетекстовые буферы данных или двоичные массивы байтов кодируются с помощью типов данных, таких как LPBYTE или LPWORD, а не типа LPTSTR или LPTCH.
Объявите указатели неопределенного типа явным образом в качестве указателей void, используя при необходимости LPVOID.
Сделайте указатель независимым от арифметического типа. Использование единиц размера TCHAR возвращает переменные размером 2 байта, если определен ЮНИКОД, и 1 байт, если ЮНИКОД не определен. Использование арифметики указателя всегда возвращает количество элементов, указанных указателем, независимо от того, имеют ли элементы размер 1 или 2 байта. Следующее выражение всегда извлекает количество элементов независимо от того, определен ли ЮНИКОД.
cCount = lpEnd - lpStart;
Следующее выражение определяет количество используемых байтов.
cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
Нет необходимости изменять оператор, подобный приведенному ниже, так как приращение указателя указывает на следующий символьный элемент.
chNext = *++lpText;
Замените литеральные строки и символьные константы манифеста макросами. Измените выражения, подобные приведенному ниже.
while(*lpFileName++ != '\\') { // ... }
Используйте макрос TEXT , как показано ниже в этом выражении.
while(*lpFileName++ != TEXT('\\')) { // ... }
Макрос TEXT приводит к тому, что строки будут оцениваться как L"string" при определении ЮНИКОДа, и как "строка" в противном случае. Для упрощения управления перемещайте литеральные строки в ресурсы, особенно если они содержат символы за пределами диапазона ASCII (0x00 через 0x7F) или доступны в пользовательском интерфейсе. Для поддержки локализации приложения для разных национальных языков очень важно, чтобы все строки пользовательского интерфейса были в локализуемых ресурсах.
Используйте универсальные версии функций Windows. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Используйте универсальные версии строковых функций стандартной библиотеки C и не забудьте определить "_UNICODE", а также "ЮНИКОД", как описано в разделе Стандартные функции C.
Если вы адаптируете приложение, изначально написанное для кодовой страницы Windows, не забудьте изменить любой код, который использует 255 в качестве наибольшего значения для символа.
При компиляции кода, написанного выше, компилятор может создавать версии кодовых страниц в Юникоде и Windows приложения из одного источника. В зависимости от определений юникода универсальные функции разрешаются для создания одинаковых двоичных файлов, как если бы вы писали код исключительно для Юникода или исключительно для кодовых страниц Windows.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по