Консультация № 109155
13.11.2007, 03:35
0.00 руб.
0 5 4
Уважаемые эксперты. Хелп. Упорно не понимаю почему не хочет компилироваться код.

Ошибка
error C2664: ‘MessageBoxW‘ : cannot convert parameter 2 from ‘const char [22]‘ to ‘LPCWSTR‘

Вижуал Студио 2005

Грандмерси

Приложение:
include <windows.h>int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ MessageBox(NULL, "Простейшая программа!","WinAPI App", 0); return 0;}

Обсуждение

Неизвестный
13.11.2007, 03:55
общий
это ответ
Здравствуйте, Chip!
Вопрос вы конечно задали чут не туда!
вам надо в системное программирование!
Но у вас ошибка переводе с кодировкой в Unicode! может вы где-то поставили в параметрах проэкта кодировку Unicode! посмотрите! У меня работает нормально, без ошибок!
Попробуйте изменить текст "Простейшая программа!" на "Simple Application" и должно заработать!!!
или пропишите так
MessageBoxW(NULL,(LPCWSTR) "Простейшая программа!",(LPCWSTR)"WinAPI App", 0);
советую вам скачать книгу
"Джеффри РИХТЕР
Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной версии Windows"
там хорошо описываеть unicode!
Удачи!
Неизвестный
13.11.2007, 09:50
общий
это ответ
Здравствуйте, Chip!

Добавьте L перед строками, чтобы сказать компилятору, что это UNICODE-строка

MessageBox(NULL, L "Простейшая программа!", L "WinAPI App", 0);
Неизвестный
13.11.2007, 09:57
общий
это ответ
Здравствуйте, Chip!

Ответ весьма просто <A href=http://forum.codenet.ru/showthread.php?t=42523>находится гуглом</A>.

Цитирую:

Дело в том, что 2005 студия по умолчанию использует юникод (LPWSTR)
, поэтому либо в основных настройках ставишь Use Unicode Character Set. А лучше
LPTSTR szClassName[ ] = TEXT("WindowsApp");
этим ты продоставляешь компилятору самому подставить нужный тип в зависимости от настроек.
для юникода это будет
LPWSTR classname[] = L"tralyalya";
для мультибайтного
LPSTR classname[] = ‘‘tralyalya‘;
Неизвестный
13.11.2007, 17:10
общий
А вот еще вопросПочему в одной программе при создании главного окнаHWND hWnd = CreateWindow(lpzClass, TEXT("Chipik Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 300, NULL, NULL, hInstance, NULL);компилятор не находит ошибок, а при создании кнопки чуть нижеCreateWindow("button", TEXT("Press me"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 10, 10, 80, 30, hWnd, (HMENU)10000, hInstance, NULL);ругается что "cannot convert parameter 2 from ‘const char [7]‘ to ‘LPCWSTR‘"
Неизвестный
14.11.2007, 05:22
общий
это ответ
Здравствуйте, Chip!

Проблема в использовании студией кодировки UNICODE. Поставте в параметрах прооекта

Configuration Properties\General\Character Set = Not Set

и всё скомпилируется.
Форма ответа