Re: Помогите разобраться с GetWindowText
От: incomoto Россия  
Дата: 23.07.11 20:56
Оценка:
Здравствуйте, mrHill, Вы писали:

H>Есть такой код:


H>char tText[254];
H>HWND hWnd;
H>//
H>hWnd = GetTopWindow(0);
H>while (hWnd != 0) {
H> hWnd = GetNextWindow(hWnd, GW_HWNDNEXT);
H> GetWindowText(hWnd, tText, 254);
H> .......
H> .......
H>}

H>Ошибка компилятора

H>e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из "char [254]" в "LPWSTR"

H>Где ошибка? Ткните носом, пожалуйста!


H>Microsoft Visual C++ 2010 Express


Ошибка преобразования типов при вызове GetWindowText (). Согласно MSDN прототип функции выглядит следующим образом:

int WINAPI GetWindowText(
__in HWND hWnd,
__out LPTSTR lpString,
__in int nMaxCount
);

где lpString — заполняемый буфер, имеющий тип LPTSTR при условии, что:

#ifdef UNICODE
typedef LPWSTR LPTSTR;
#else
typedef LPSTR LPTSTR;
#endif

определенный как (судя по сообщению MSVC++ макрос UNICODE все-таки определен):

typedef WCHAR *LPWSTR;

где WCHAR, в свою очередь определен как:

typedef wchar_t WCHAR;

где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:

typedef unsigned char *LPTSTR;

Что, в свою очередь, совсем не char [254]. Поэтому компилятор вполне добросовестно делает свою работу. Вот такой вот пирог от Micro$oft. Раз уж функция требует зловещий LPWSTR, значит этого типа переменную и нужно ей преподнести в данном случае.
What doesn't kill us, just makes us stronger.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.