Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы воспользоваться поддержкой времени выполнения MFC и C для Юникода, необходимо:
Определение
_UNICODE.Определите символ
_UNICODEперед сборкой программы.Укажите точку входа.
На странице "Дополнительно"папки компоновщика в диалоговом окне "Страницы свойств проекта" задайте символу входа значение
wWinMainCRTStartup.Используйте переносимые функции и типы времени выполнения.
Используйте соответствующие функции времени выполнения C для обработки строк Юникода. Вы можете использовать семейство функций
wcs, но, возможно, предпочитаете полностью переносимые (на международном уровне) макросы_TCHAR. Эти макросы имеют префикс_tcs; они заменяют один к одному семейство функцийstr. Эти функции подробно описаны в разделе "Интернационализация" справочника по библиотеке времени выполнения. Дополнительные сведения см. в разделе "Сопоставления универсального текста" в tchar.h.Используйте
_TCHARи связанные переносимые типы данных, описанные в разделе "Поддержка Юникода".Правильно обрабатывать литеральные строки.
Компилятор Visual C++ интерпретирует литеральную строку, закодированную следующим образом:
L"this is a literal string"обозначать строку символов Юникода. Для литеральных символов можно использовать один и тот же префикс. Используйте макрос
_Tдля обработки строк литералов в универсальной форме, чтобы они компилировались как строки Unicode при использовании Unicode, или как строки ANSI (включая MBCS) при отсутствии Unicode. Например, вместо:pWnd->SetWindowText( "Hello" );используйте:
pWnd->SetWindowText( _T("Hello") );С
_UNICODEопределенным значением_Tпреобразует литеральную строку в форму L-префикса; в противном случае_Tпреобразует строку без префикса L.Совет
Макрос
_Tидентичен макросу_TEXT.Будьте осторожны, передавая длину строк в функции.
Для некоторых функций требуется количество символов в строке; другие хотят, чтобы число байтов. Например, если
_UNICODEопределен, следующий вызов объектаCArchiveне будет работать (иstrявляетсяCString).archive.Write( str, str.GetLength( ) ); // invalidВ приложении Юникода длина дает количество символов, но не правильное число байтов, так как каждый символ имеет ширину 2 байта. Вместо этого необходимо использовать следующее:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validуказывает правильное количество байтов для записи.
Однако функции-члены MFC, ориентированные на символы, а не байтовые, работают без этого дополнительного кода:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOutпринимает число символов, а не число байтов.Используйте fopen_s, _wfopen_s для открытия файлов Юникода.
Чтобы свести итоги, MFC и библиотека времени выполнения предоставляют следующую поддержку программирования Юникода:
За исключением функций-членов класса базы данных, все функции MFC поддерживают Unicode, включая
CString.CStringтакже предоставляет функции преобразования Юникод/ANSI.Библиотека выполнения предоставляет все функции обработки строк в версиях для Юникода. (Библиотека времени выполнения также предоставляет переносимые версии, подходящие для Юникода или для MBCS. Это
_tcsмакросы.)tchar.h предоставляет переносимые типы данных и
_Tмакрос для преобразования строк и символов литерала. Дополнительные сведения см. в разделе "Сопоставления универсального текста" в tchar.h.Библиотека времени выполнения предоставляет расширенную версию символов
main. Используйтеwmainдля обеспечения совместимости приложения с Юникодом.