Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 27


29

Таким образом, используя этот тип, мы можем объявлять данные, ко­торые будут восприниматься в разных обстоятельствах то как ANSI-, то как Unicode-строки или символы. Например, строка

TCHAR* pszMyStnng = «This is my string»;

в зависимости от того, определен ли символ ^UNICODE, будет считаться либо состоящей из символов ANSI и занимать 18 бантов, либо состоящей из символов ANSI и занимать памяти в два раза больше.

Теперь возникает проблема с компилятором. По умолчанию, компи­лятору почему-то наплевать (извините за такое слово, но я долго не мог понять, в чем же состоит моя ошибка при определении строки), что мы описываем строку как состоящую из символов Unicode. Для него если строка, так уж обязательно ANSI! Попробуйте откомпилировать следую­щую «программу»:

#define JJNICODE

#include <windows.h>

#include <tchar.h>

int WINAPI WinMain (HINSTANCE hlnstance, H1NSTANCE hPrevInstance,

LPSTR IpszCmdParam, int nCmdShow ) i

TCHAR* pszMyString = "This is my string"; return 0;

Кажется, полученный .      -

GXG

что   все   сделано   правильно,   но   попробуйте  посмотреть -файл обычным    ^ в ,,оиои е. Вы увидите (<This is my string     в   обычной кодировке,   т.   е.'  определение   _„.. никакого влияния на представление строки не оказывает. Таким of!

ГЖет",

необходимо явно объявлять строку, как состоящую из символов Попробуйте внести небольшое изменение.

TCHAR* pszMyString = L'This is my string";

Буква L перед строкой указывает компилятору, что строка состоит из символов Unicode. В .ехе-файле мы получим символы Unicode. Но в таком случае мы не можем получить ANSI-строку! Замкнутый круг! Проблема разрешается введением еще одного макроса - _ТЕХТ. Опреде­лен он примерно так:

#ifdef_UNICODE typedef _ТЕХТ(х) L ## х

#elsc typedef _TF.XT(x) x

30

Пользуясь этим макросом, можено описать наши данные таким обра­зом, что они будут компилироваться в обоих случаях так, как мы того хотим.

Попробуйте записать




Начало  Назад  Вперед



Книжный магазин