Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 871
от 09.10.2007, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 485, Экспертов: 67
В номере:Вопросов: 1, Ответов: 4


Вопрос № 104196: Здраствуйте! В Visual Studio 2003 данный код работал: CMainWnd::CMainWnd() { Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault, NULL,NULL); // Создать окно программы } А в Visual Studio 2005 раб...

Вопрос № 104.196
Здраствуйте! В Visual Studio 2003 данный код работал:

CMainWnd::CMainWnd()
{

Create(NULL,"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}

А в Visual Studio 2005 работать отказывается - пишет error C2664: 'CFrameWnd::Create' : cannot convert parameter 2 from 'const char [6]' to 'LPCTSTR.
С чем это связано и как эту проблему решить??? Помогите пожалуйста!
Отправлен: 03.10.2007, 20:47
Вопрос задал: Veal (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: mega
Здравствуйте, Veal!
дело не студии, а в выборе чарсета, в 2005-й по умолчанию стоит юникод, для исправления, окаймляйте строковые константы маркером _T(), в вашем случае это будет так:

Create(NULL,_T("Label"),WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
или, в частном порядке:
Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL); // Создать окно программы
}
Управлять чарсетом можно отсюда: Project->Properties->General->Character Set
Ответ отправил: mega (статус: 2-ой класс)
Ответ отправлен: 03.10.2007, 20:56
Оценка за ответ: 5

Отвечает: Ross
Здравствуйте, Veal!

Попробуй написать так: Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL);
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 03.10.2007, 21:05

Отвечает: Aristos
Здравствуйте, Veal!

Это связано с тем, что в MFC используются обобщенные строки. То есть работа со строковыми типами (в частности LPCTSTR) ведется однообразным образом для ANSI строк (символ char - 1 байт) и для UNICODE строк (символ wchar_t - 2 и более байт).
Таким образом, в зависимости от настроек компилятора LPCTSTR может быть const char* или const wchar_t*. В вашем случае, видимо, UNICODE-вариант. Есть несколько решений:
1. Использовать wchar_t вместо char и оформлять строки как L"string" и отдельные символы как L'c'.
2. Изменить настройки в [Project]/[Properties]/[Configuration Properties]/[General].
3. Использовать обобщенные строки с помощью макроса TEXT("string") или _T("string").
---------
нет ничего невозможного
Ответ отправил: Aristos (статус: 7-ой класс)
Ответ отправлен: 03.10.2007, 21:28

Отвечает: Новак Александр Васильевич
Здравствуйте, Veal!
И ещё хочется добавить, так для общего понимания, что по моему начиная с XP или чють пораньше Windows и весь её API`шный интерфейс работает под UNICODE – это соответствует вызовам API`шеек через суффикс на конце W.
И видимо на основании вышеизложенного Microsoft обратило на это внимание (чего-то она с этим не торопилась) и токо в VS 2005 в свойствах прэкта (Project/Properties во вкладке GENERAL по умолчанию при создании нового проекта ПАРАМЕТР Character Set выставляется Use Unicode Character Set) оно и понятно в этом случае не требуется переводить (фоново) из ANSCII to UNICODE.

---------
ПОЛЬЗУЙТЕСЯ НАШИМИ ПРОГРАММАМИ, ПОДДЕРЖИТЕ РОССИЙСКИХ ПРОГРАММИСТОВ ИНАЧЕ МЫ ВЫМРЕМ КАК МОМОНТЫ. ;-)
Ответ отправил: Новак Александр Васильевич (статус: 2-ой класс)
Ответ отправлен: 04.10.2007, 20:25


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.60.10 от 27.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное