Разработка приложений с использованием Unicode



Чтобы снизить зависимость приложения от используемой кодировки, целесообразно в программе определить два макроса - UNICODE и _UNICODE. Также рекомендуется использовать новый набор данных и функций, обрабатывающих строки и описанных в стандартных заголовочных файлах.

Обычно, имена Unicode данных и функций содержат префикс "wc" (от wide character), "w". Например, WCHAR - Unicode символ, wcscmp - функция сравнения Unicode строк. Можно также поставить префикс "L" перед текстовой строкой, например, L"Текстовая строка" - строка в формате Unicode.

Чтобы реализовать возможности компиляции двойного назначения, нужно включить в состав программы заголовочный файл tchar.h. Он состоит из макросов, которые ссылаются на Unicode данные и функции, если в программе определен макрос UNICODE, и на ANSI - в противном случае. Так, для объявления символьного массива универсального назначения применяется тип TCHAR, который транслируется в WCHAR, если UNICODE определен, и в CHAR, если не определен. Аналогичным образом макросы с префиксом "l" переопределяют строковые функции (lstrlen вместо strlen и т.д.), а для определения символьных и строковых литералов применяется макрос _TEXT (или просто _T).

 

#define UNICODE

#ifdef UNICODE

#define _UNICODE

#endif

#include <windows.h>

#include <tchar.h>

#include <stdio.h>

 

void main() {

PTCHAR TextString = _T("Hello, world");

_tprintf(_T("String - %s\n"), TextString);

}

     

Приведенная программа может вывести строку "Hello, world" в файл MyFile.txt в обычном формате и в формате Unicode

 

#define UNICODE

#ifdef UNICODE

#define _UNICODE

#endif

#include <windows.h>

#include <tchar.h>

#include <stdio.h>

 

void main() {

 

HANDLE hFile;

PTCHAR FileName = _T("MyFile.txt");

PTCHAR TextString = _T("Hello, world.");

DWORD iWrite, StringLength = lstrlen(TextString);

 

_tprintf(_T("There are %ld symbols in text string %s\n"), StringLength, TextString);

 

 

hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | 0, NULL);

 

iWrite = StringLength;

#ifdef UNICODE

 iWrite = 2*StringLength;

#endif

 

WriteFile(hFile, TextString, iWrite, &iWrite, NULL);

printf("%d bytes are written to file\n", iWrite);

CloseHandle(hFile);

}

 

 


Дата добавления: 2019-09-13; просмотров: 155; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!