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


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


TCHAR* pszMyString - _TEXT("This is my string");

и откомпилировать программу с определением _UNICODE и без таково­го. Ну и как? Получилось?

К этому моменту трудности совместной работы Unicode и Run-Time Library уже преодолены. На очереди -

РАБОТА С UNICODE В WIN32 API

Предлагаю читателю обратить внимание на то, каким образом опреде­ляются типы данных и указатели в заголовочных файлах Win 32 (обратите внимание - символ UNICODE без знака подчеркивания, со знаком подчеркивания он используется в RTL):

#ifdcf UNICODE

typcdcf wcharj TCHAR; if/else

typcdef unsigned char TCHAR;

#cndif

typcdef TCHAR * LPTSTR, *LPTCH; typedef unsigned char CHAR; typedefCHAR *LPSTR, *LPCH; typcdcf unsigned wchar_t WCHAR, typedef WCHAR *LPWSTR, *LPWCH;

Что же касается работы с функциями, то в Win32, по сравнению с RTL, при работе с функциями программист может чувствовать себя более комфортно. Здесь все сделано намного проще и, по-моему, более изящно. При работе с обеими кодировками используются одинаковые имена функций. Достигается это следующим образом:

каждая функция, как и в RTL, имеет ANSI- и Unicode-версии. При этом имена функций формируются так:

к обычному имени (думаю, не нужно объяснять, что я под­разумеваю под обычным именем?) в случае ANSI-версии добав­ляется символ А (латинская буква, не путать с русской), напри­мер для функции DispatchMessageQ имя ANSI-версии будет DispatchMessageAQ;

для Unicode-версии к обычному имени функции добавляет­ся символ W. Например, для функции DispatchMessage() имя Unicode-версии будет DispatchMessageWQ;

31

создается макрос, имя которого совпадает с обычным именем функции. При определении символа UNICODE макрос разворачивается в имя Unicode-версии функции. Если символ UNICODE не определен, то макрос разворачивается в имя ANSI-версии функции. Например, для уже известной нам функции DispatchMessageWQ эти определения выглядят следующим образом:

WINUSERAPI LONG WINAPI DispatchMessageA(CONST MSG *lpMsg); WINUSERAPI LONG WINAPI DispatdiMessageW(CONST MSG *IpMsg);




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



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