Использование универсальных типов данных
Если в коде используются универсальные типы данных, их можно скомпилировать для Юникода , просто используя директиву препроцессора, чтобы определить "ЮНИКОД" перед операторами #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.
Связанные темы