Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Чтобы воспользоваться поддержкой времени выполнения 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для обеспечения совместимости приложения с Юникодом.