Windows для профессионалов

       

Создание программ, способных использовать и ANSI, и Unicode


Неплохая мысль — заранее подготовить свое приложение к Unicode, даже если Вы пока не планируете работать с этой кодировкой. Вот главное, что для этого нужно:

  • привыкайте к тому, что текстовые строки — это массивы символов, а не массивы байтов или значений типа char;
  • используйте универсальные типы данных (вроде TCHAR или PTSTR) для текстовых символов и строк;
  • используйте явные типы данных (вроде BYTE или PBYTE) для байтов, указателей на байты и буферов данных;
  • применяйте макрос _TEXT для определения символьных и строковых литералов;
  • предусмотрите возможность глобальных замен (например, PSTR на PTSTR);
  • модифицируйте логику строковой арифметики. Например, функции обычно принимают размер буфера в символах, а не в байтах. Это значит, что вместо sizeof(szBuffer) Вы должны передавать (sizeof(szBuffer) / sizeof(TCHAR)). Но блок памяти для строки известной длины выделяется в байтах, а не символах, т. e. вместо malloc(nCharacters) нужно использовать malloc(nCbaracters *sizeof(TCHAR)) Из всего, что я перечислил, это запомнить труднее всего — если Вы ошибетесь, компилятор не выдаст никаких предупреждений.

  • Разрабатывая программы-примеры для первого издания книги, я сначала написал их так, что они компилировались только с использованием ANSI. Но, дойдя до этой главы (она была тогда в конце), понял, что Unicode лучше, и решил написать примеры, которые показывали бы, как легко создавать программы, компилируемые с применением и Unicode, и ANSI. B конце концов я преобразовал все программы-примеры так, чтобы их можно было компилировать в расчете на любой из этих стандартов.

    Конверсия всех программ заняла примерно 4 часа — неплохо, особенно если учесть, что у меня совсем не было опыта в этом деле.

    В Windows есть набор функций для работы с Unicode-строками. Эти функции перечислены ниже.

    Функция

    Описание

    lstrcat

    Выполняет конкатенацию строк

    lstrcmp

    Сравнивает две строки с учетом регистра букв

    lstrcmpi

    Сравнивает две строки без учета регистра букв

    lstrcpy

    Копирует строку в другой участок памяти

    lstrlen

    Возвращает длину строки в символах

    <

    Содержание  Назад  Вперед







    Forekc.ru
    Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий