Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2012, 03:51   #11
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
~down
Код:
sklz.lpszClassName = szClassName;
Показывает такие ошибки:
Цитата:
Error 1 error C2440: '=' : cannot convert from 'char [12]' to 'LPCWSTR' C:\Users\Artem\documents\visual studio 2010\Projects\Skillz_Cup_Checker\Sk illz_Cup_Checker\design.cpp 18 1 Skillz_Cup_Checker
Error2 IntelliSense: a value of type "char *" cannot be assigned to an entity of type "LPCWSTR" c:\users\artem\documents\visual studio 2010\projects\skillz_cup_checker\sk illz_cup_checker\design.cpp 19 21 Skillz_Cup_Checker
Так же пробовал функцию strcpy() - тоже самое.
hvz- вне форума Ответить с цитированием
Старый 14.03.2012, 05:12   #12
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну знаете ли...
В Вашем коде:

Код:
char szClassName[] = "SkillzClass";

WNDCLASSEX sklz;
//...
sklz.lpszClassName = NULL;
//...
if (!RegisterClassEx(&sklz)) 
//...
  CreateWindowA( szClassName....
Из чего делается вывод, что автор жестко использует ANSI версию win32api, но просто пропустил важное поле структуры.

Теперь выясняется:
Цитата:
Error 1 error C2440: '=' : cannot convert from 'char [12]' to 'LPCWSTR'
Риторически: что такое RegisterClassEx?
Функция?
Нет.
Это макрос.

Компилятор (препроцессор) подставляет вместо этого нужную функцию:
Код:
#ifdef UNICODE
#define RegisterClassEx  RegisterClassExW
#else
#define RegisterClassEx  RegisterClassExA
#endif // !UNICODE
Поищите, где в Вашей конфигурации определен UNICODE.
И есть такой тип TCHAR, очень поможет.


ps
http://www.programmersforum.ru/attac...1&d=1330355299

Последний раз редактировалось EUGY; 14.03.2012 в 06:11.
EUGY вне форума Ответить с цитированием
Старый 14.03.2012, 21:16   #13
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Честно говоря, мало что понятно из того что написали, так же не нашёл у себя то что у вас на скрине(у меня студия 2010 английская).
Я только начинаю изучение winapi, учусь по книге Ю.Щупака "Win32 API Эффективная разработка приложений" там и скомуниздил код заполнения экземпляра класса окна. Однако там подрузамевается что всё работает, а на деле нет =\
Цитата:
Поищите, где в Вашей конфигурации определен UNICODE
В книге написано что определяеться директивой препроцессора #define UNICODE - я прописал эту директиву в файле с кодом дизайна и в главном файле тоже, но эффекта как не было так и нет

Последний раз редактировалось hvz-; 14.03.2012 в 21:23.
hvz- вне форума Ответить с цитированием
Старый 14.03.2012, 21:36   #14
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

В том то и дело, что UNICODE у Вас определен, а пытаетесь скормить ANSI строку в юникодную версию WNDCLASSEX и RegisterClassEx.
Откройте свойства конфигурации, и поищите где отключить.
Хотите работать без оглядки на версии, используйте CreateWindow, а не CreateWindowA и вместо типа char - TCHAR.
EUGY вне форума Ответить с цитированием
Старый 14.03.2012, 22:17   #15
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
В том то и дело, что UNICODE у Вас определен, а пытаетесь скормить ANSI строку в юникодную версию WNDCLASSEX и RegisterClassEx.
Откройте свойства конфигурации, и поищите где отключить.
Хотите работать без оглядки на версии, используйте CreateWindow, а не CreateWindowA и вместо типа char - TCHAR.
Спасибо за совет, но я всё таки нашёл где отключить юникод и всё заработало. Т.е. без этого юникода можно и не юзать TCHAR и использовать простой char?
hvz- вне форума Ответить с цитированием
Старый 14.03.2012, 22:28   #16
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Т.е. без этого юникода можно и не юзать TCHAR и использовать простой char?
Да.
Послушайте, там ни чего такого уж сложного нет.
Есть два типа
char - один байт.
wchar_t - два байта.

И вот, чтобы задавать строки не глядя, определен тип TCHAR

Код:
#ifdef UNICODE
       typedef wchar_t    TCHAR;
#else
      typedef char        TCHAR;
#endif
То есть в зависимости от версии вместо TCHAR подставляется char или wchar_t.
TCHAR* str = TEXT("qwerty");
Это соглашение используется везде, зачем ограничивать себя, используя одну версию.

Последний раз редактировалось EUGY; 14.03.2012 в 22:31.
EUGY вне форума Ответить с цитированием
Старый 14.03.2012, 22:37   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Это соглашение используется везде, зачем ограничивать себя, используя одну версию.
а толку от анси версий в винде то?(исключение старые версии винды)

http://programmersforum.ru/showthrea...hlight=Unicode
пора эту тему ставить синонимом слова Unicode.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.03.2012, 22:47   #18
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
а толку от анси версий в винде то?(исключение старые версии винды)
Я собсно и пытаюсь это донести. )
Или я допустил какую-то двусмысленность в моих постах?
Не обращайте внимания.
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка линковки! Hacker19_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 19.01.2012 06:43
Свой класс - ошибка линковки LNK2019: ссылка на неразрешенный внешний символ... Egyptorium Общие вопросы C/C++ 7 11.01.2012 17:48
Шаблонный класс, ошибка линковки revaldo666 Общие вопросы C/C++ 1 12.12.2011 15:57
Банальная ошибка линковки prouser Общие вопросы C/C++ 2 24.07.2011 04:22
Ошибка TClientSocket и вопрос qwwwq Работа с сетью в Delphi 2 01.08.2009 13:58