Ошибка компилятора
e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из "char [254]" в "LPWSTR"
Здравствуйте, mrHill, Вы писали:
H>Ошибка компилятора H>e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из "char [254]" в "LPWSTR"
H>Где ошибка? Ткните носом, пожалуйста!
вы пытаетесь передать ANSI string, а просят юникодную строчку (wchar_t*)
либо сделайте свой текст юникодным (вместо char надо wchar_t), либо уберите поддержку уникода в проекте (в свойствах проекта уберите юникод). в последнем случае это приведет к тому, что GetWindowsText будет превращаться не в GetWindowTextW, а в GetWindowsTextA
Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, mrHill, Вы писали:
H>>Ошибка компилятора H>>e:\mydocs\visual studio 2010\projects\example1\example1\Form1.h(113): error C2664: GetWindowTextW: невозможно преобразовать параметр 2 из "char [254]" в "LPWSTR"
H>>Где ошибка? Ткните носом, пожалуйста! U>вы пытаетесь передать ANSI string, а просят юникодную строчку (wchar_t*) U>либо сделайте свой текст юникодным (вместо char надо wchar_t), либо уберите поддержку уникода в проекте (в свойствах проекта уберите юникод). в последнем случае это приведет к тому, что GetWindowsText будет превращаться не в GetWindowTextW, а в GetWindowsTextA
определенный как (судя по сообщению MSVC++ макрос UNICODE все-таки определен):
typedef WCHAR *LPWSTR;
где WCHAR, в свою очередь определен как:
typedef wchar_t WCHAR;
где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:
typedef unsigned char *LPTSTR;
Что, в свою очередь, совсем не char [254]. Поэтому компилятор вполне добросовестно делает свою работу. Вот такой вот пирог от Micro$oft. Раз уж функция требует зловещий LPWSTR, значит этого типа переменную и нужно ей преподнести в данном случае.
Здравствуйте, uzhas, Вы писали:
I>>где WCHAR, в свою очередь определен как:
I>>typedef wchar_t WCHAR;
I>>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:
I>>typedef unsigned char *LPTSTR;
U>Остапа понесло и принесло не туда
Ёшкин кот, точно.
unsigned short, конечно же, никакой не unsigned char... Пардон
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, incomoto, Вы писали:
I>>>>где wchar_t — обыкновенный unsigned char (т.е. 16-рязрядное целое без знака), итого имеем:
I>>unsigned short, конечно же, никакой не unsigned char... Пардон
C>Опять неправильно. wchar_t — встроенный тип C++, никак не связанный с unsigned short.
Каюсь, опять погорячился. В MSDN, правда, написано:
"By default wchar_t is a typedef for unsigned short."
Ну а в стандарте С++98 — "implementation-defined". Правда, тип, оказывается, был внесен еще в C90, т.е. еще до официального анонсирования C++...