Консультация № 104196
03.10.2007, 20:47
0.00 руб.
0 4 4
Здраствуйте! В 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:56
общий
это ответ
Здравствуйте, 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
Неизвестный
03.10.2007, 21:05
общий
это ответ
Здравствуйте, Veal!

Попробуй написать так: Create(NULL,L"Label",WS_OVERLAPPEDWINDOW,rectDefault,
NULL,NULL);
Неизвестный
03.10.2007, 21:28
общий
это ответ
Здравствуйте, 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").
Неизвестный
04.10.2007, 20:25
общий
это ответ
Здравствуйте, Veal!
И ещё хочется добавить, так для общего понимания, что по моему начиная с XP или чють пораньше Windows и весь её API`шный интерфейс работает под UNICODE – это соответствует вызовам API`шеек через суффикс на конце W.
И видимо на основании вышеизложенного Microsoft обратило на это внимание (чего-то она с этим не торопилась) и токо в VS 2005 в свойствах прэкта (Project/Properties во вкладке GENERAL по умолчанию при создании нового проекта ПАРАМЕТР Character Set выставляется Use Unicode Character Set) оно и понятно в этом случае не требуется переводить (фоново) из ANSCII to UNICODE.
Форма ответа