Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetConsoleTitle в Visual Studio 2008, Не пашет 
:(
    Опции темы
Politexnik
Дата 30.7.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.3.2008
Где: Ереван, Армения

Репутация: нет
Всего: нет



Здрасьте!
Перешел с Visual C++ 6.0 на  Visual Studio 2008.
В 6.0 WinAPI функция  SetConsoleTitle из windows.h работала ПРЕВОСХОДНО.
Так что такой код как
Код

SetConsoleTitle("This is the cоnsole title")

работал без ошибок.
Но в Visual Studio 2008 это все не работает. Выдает ошибку, ругаеется нецензурными словами, типа

error C2664: 'SetConsoleTitleW' : cannot convert parameter 1 from 'const char [28]' to 'LPCWSTR'

Но штука в том, что если отконвертировать старый проект в новый, то эта функция работает.

Помогите пожалуйста разобраться.
Заранее спасибо.

PM MAIL   Вверх
mrbrooks
Дата 30.7.2008, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Здается мне что вся соль в юникоде  smile

Добавлено через 4 минуты и 19 секунд
Код

SetConsoleTitleA("This is the cоnsole title");


PM MAIL   Вверх
Andrey44
Дата 30.7.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Все проекты в 2008 студии идут в юникоде(в смысле по-умолчанию, но можно снять птичку smile ), так что лучше делать так:
Код

SetConsoleTitle(L"This is the cоnsole title");

или так:
Код

SetConsoleTitle(_T("This is the cоnsole title"));


Это сообщение отредактировал(а) Andrey44 - 30.7.2008, 07:49


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Politexnik
Дата 30.7.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.3.2008
Где: Ереван, Армения

Репутация: нет
Всего: нет



Большое спасибо!!!
Все ОК!!!
Но что меняет буква L или _T  спереди. Кодировку???

И еще один маленький вопросик.
Что такое LPCWSTR и чем отличается от  const char???
PM MAIL   Вверх
mrbrooks
Дата 30.7.2008, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



юникод строка и анси строка.

Цитата

Заглавная буква L перед строковым литералом указывает компилятору, что его надо обрабатывать как Unicode-строку. Тогда, размещая строку в области данных программы, компилятор вставит между всеми символами нулевые байты. Но возникает другая проблема — программа компилируется, только если _UNICODE определен Следовательно, нужен макрос, способный избирательно ставить L перед строковым литералом. Эту работу выполняет макрос _T, также содержащийся в Tchar.h.


Добавлено через 3 минуты и 35 секунд
Обрати внимание на мой пример - функции можно использовать также в зависимости от вида строки - если в анси то функция заканчивается на A, если в юникоде то на W. В общем виде без окончания - будет использоваться то какая кодировка по умолчанию.
PM MAIL   Вверх
Andrey44
Дата 30.7.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



LPCWSTR - это указатель на константную юникодную строку, вот и все отличия от LPCSTR тое-же const char[]


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Igoreck
Дата 29.11.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



а можно написать 
Код

SetConsoleTitle(LPCWSTR(NAME_SERVER_SOCKET));


???
у меня так то же работает 

хотя есть интересный момент - когда вводишь название функции, то предлагается только вариант SetConsoleTitle
а когда смотришь ее варианты перегрузки то предлагается или SetConsoleTitleA  или  SetConsoleTitleW



PM MAIL   Вверх
WhKitten
Дата 29.11.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



В свойствах проекта Configuration Properties / General / Character set установить "Use Multi-Byte character set".
Вообще  SetConsoleTitle это макрос, который вызывает SetConsoleTitleA или SetConsoleTitleW. При этом функции для Unicode работают по времени также, как ANSI или даже быстрее - так что вызывать SetConsoleTitleA не имеет смысла. Чтобы в независимости от настроек проекта код компилировался при передаче макросу строки должны быть преобразованы к типу _TCHAR*. Это делает макрос _T или _TEXT. В зависимости от настроек проекта _TCHAR интерпретируется как char или wchar_t.
Поэтому любой код, который вызывает макросы, а не функции (который имеют A или W на конце) без использования макросов _T или _TEXT можно считать неверным. О чём и говорит ошибка.

http://msdn.microsoft.com/ru-ru/library/c426s321.aspx

Это сообщение отредактировал(а) WhKitten - 29.11.2010, 16:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.