На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Generic Data Types



If you use generic data types in your code, it can be compiled for Unicode simply by defining UNICODE before the include statements for the header files. To compile the code for ANSI, omit the UNICODE definition.

To convert code that processes strings so it can be compiled for either ANSI or Unicode, follow these steps.

1. Change all character and string types used for text to TCHAR, LPTSTR, or LPTCH.
2. Be sure that pointers to nontext data buffers or binary byte arrays are coded with the LPBYTE type and not mistakenly with the LPTSTR or LPTCH type. Declare pointers of indeterminate type explicitly as void pointers by using LPVOID, as appropriate.
3. Make pointer arithmetic type-independent. Using units of TCHAR size yields variables that are two bytes if UNICODE is defined, and one byte if UNICODE is not defined. Using pointer arithmetic always returns the number of elements pointed to by the pointer, whether the elements are one or two bytes in size. The following expression always returns the number of elements, regardless of whether UNICODE is defined:

cCount = lpEnd - lpStart;


The following expression determines the number of bytes used:

cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);


There is no need to change a statement like the following one, because the pointer increment points to the next character element.

chNext = *++lpText;


4. Replace literal strings and manifest character constants with macros. Change expressions like the following one.

while(*lpFileName++ != '\\') {
/* .
/* .
/* .
}


Use the TEXT macro as follows in this expression.

while(*lpFileName++ != TEXT('\\')) {
./*
./*
./*
}


Precede a literal string in the Unicode form of a function by the letter L. The TEXT macro causes strings to be evaluated as L"string" when UNICODE is defined, and to "string" otherwise. The following call to the Unicode version of lstrlen demonstrates the use of the L identifier.

cch == lstrlenW(L"hello world");


For easier management, move literal strings into resources, especially if they contain characters outside the ASCII range (that is, 0x00 through 0x7F).

5. Call only the Unicode versions of the standard C library string functions, as listed in Standard C Functions.
6. Change any code that relies on 255 as the largest value for a character.



When you compile code that you have changed as outlined above, the compiler creates the same binary file as it did before you made the changes. When you compile the code using the UNICODE option, however, it is compiled as a Unicode application.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Общих Типов Данных



Если Вы используете общие типы данных в вашем коде, может быть компилировано для Уникода просто определяя УНИКОД перед включать утверждения для файлов заголовка. Для того, чтобы компилировать код для ANSI, опустите определение УНИКОДА.

Для того, чтобы преобразовывать код, который обрабатывает строки, так что может быть компилировано для или Уникод ANSI или, последуйте за этими шагами.

1. Измените весь символ и нанизывайте типы использованные для текста на TCHAR, LPTSTR, или LPTCH.
2. Быть уверенно, что указатели в nontext буферы данных или двоичный байт подготавливает, закодированы типом LPBYTE и ошибочно не с LPTSTR или типом LPTCH. Объявите указатели неопределенного типа явно как недействительные указатели используя LPVOID, как подходящий.
3. Сделайте указателем арифметическим набирать-независимым. Используя устройства размера переменных продуктов TCHAR, которые - два байта если УНИКОД определен, и один байт если УНИКОД не определен. Арифметика указателя Использования всегда возвращает количество элементов указанных, чтобы указателем, независимо элементы - один или два байта по величине. Следующее выражение всегда возвращает количество элементов, независимо от того, что УНИКОД определен:

cCount = lpEnd - lpStart;


Следующее выражение определяет количество использованных байтов:

cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);


Нет необходимости изменять утверждение подобно следующему один, поскольку приращение указателя указывает на следующий символьный элемент.

chNext = *++lpText;


4. Замените буквальные строки и обнаруживайте символьные константы с макро. Выражения Изменения подобно следующему один.

пока(*lpFileName++ != '\\') {
/* .
/* .
/* .
}


Используйте макро ТЕКСТА следующим образом в этом выражении.

пока(*lpFileName++ != ТЕКСТ('\\')) {
./*
./*
./*
}


Предшествуйте буквальной строке в форме Уникода функции письмом L. строки макро причин ТЕКСТА, которые нужно оценивать как L"string" когда УНИКОД определен, и, чтобы "нанизывать" в противном случае. Следующее вызова в версию Уникода lstrlen демонстрирует использование идентификатора L.

cch == lstrlenW(мир L"hello");


Для легче управления, буквальных строк перемещения в ресурсы, особенно если они содержат символы за пределами дипазона ASCII (то есть, 0x00 через 0x7F).

5. Назовите только версии Уникода стандартных библиотечных функций строки C, как указано в Функциях Standard C.
6. Измените любой код, который доверяется на 255 как самая большая величина для символа.



Когда Вы компилируете код выше который Вы изменили как очерчено, компилятор создает тот же двоичный файл как он делал прежде, чем Вы были сделаны изменения. Когда Вы компилируете код, использовавший опцию УНИКОДА, тем не менее, компилировано как приложение Уникода.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz