Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
#1

Hello World и API - C++

20.03.2010, 17:18. Просмотров 1555. Ответов 10
Метки нет (Все метки)

Здравствуйте! Из книги по API переписал код, а он не компилируется. Выдает ошибку:
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [13]' to 'LPCWSTR'
Объясните пожалуйста (по-подробнее) в чем ошибка? Вот собственно код:
C++
1
2
3
4
5
6
#include<windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Hello, win32", "Hello from box", MB_OK);
return 0;
}
Не разобравшись с 1-м примером дальше читать книгу смысла не вижу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2010, 17:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Hello World и API (C++):

Поменять слова местами то есть Hello World > World Hello C++
Ребят всем привет помогите решить задачку: Имеется предварительно созданный...

Hello world C:
Доброго времени суток! Собственно, начал изучать С++, пользуюсь VS2012 ...

Hello World!
Доброго времени товарищи. Не могу никак найти тему. Где-то на этом форуме есть...

Hello, World!
Добрый день. Недавно начал изучать си++. Работаю в Microsoft Visual Studio...

Hello world
пытаюсь запустить прогу в Код-Блокс. Что не так (см. приложение)?

Hello world
Здравствуйте при написании hello world возникает такая ошибка: error C2146:...

10
Cepera
53 / 53 / 5
Регистрация: 09.03.2009
Сообщений: 178
20.03.2010, 17:53 #2
'MessageBoxW' : cannot convert parameter 2 from 'const char [13]' to 'LPCWSTR'
Т.е. не может конвертировать из 'const char [13]' в 'LPCWSTR'
Так попробуйте:
C++
1
2
3
4
5
6
7
8
#include<windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
    wchar_t lpText[] = L"Hello, win32";
    wchar_t lpCaption[] = L"Hello from box";
    MessageBox(NULL, lpText, lpCaption, MB_OK);
return 0;
}
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
20.03.2010, 18:02 #3
zayaz, парень, ты всё сделал правильно. Но, понимаешь, прототипы функций (а нас щас интересуют типы параметров для кажой среды свои)

Поэтому не удивляйся.
В книге ты прочёл, что вторым параметром
MessageBox принимает char*, но не пашет. Оказывается у тебя в среде второй параметр должен иметь тип LPCWSTR!

К чему такое- я не знаю. Но оно есть. Бояться этого не надо, попробуй сделать явное переопределение типов так:

C++
1
2
[FONT=monospace]MessageBox(NULL, (LPCWSTR)"Hello, win32", "Hello from box", MB_OK);
[/FONT]
Вот здесь про типы подробно
1
Cepera
53 / 53 / 5
Регистрация: 09.03.2009
Сообщений: 178
20.03.2010, 18:27 #4
Цитата Сообщение от kravam Посмотреть сообщение
К чему такое- я не знаю.
Функций MessageBox две: MessageBoxA и MessageBoxW, ansi и unicode соответственно. Для перовой используется const char*, для второй const wchar_t *. Какую функцию использовать зависит от настроек.
Тогда (если хотите приводить типы) вот так более правильно:
C++
1
MessageBox(NULL, (LPCWSTR)L"Hello, win32", (LPCWSTR)L"Hello from box", MB_OK);
Можно еще попробовать литеральные константы обернуть макросом TEXT
C++
1
MessageBox(NULL, TEXT("Hello, win32"), TEXT("Hello from box"), MB_OK);
1
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 20:37  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
#include<windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
   wchar_t lpText[] = L"Hello, win32";
    wchar_t lpCaption[] = L"Hello from box";
    MessageBox(NULL, lpText, lpCaption, MB_OK);
    
return 0;
}
unresolved external symbol _main referenced in function ___tmainCRTStartup

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
#include<windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
  
    MessageBox(NULL, (LPCWSTR)L"Hello, win32", (LPCWSTR)L"Hello from box", MB_OK);
    
return 0;
}
unresolved external symbol _main referenced in function ___tmainCRTStartup
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
20.03.2010, 20:39 #6
Ты какой средой пользуешься?
0
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 20:40  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
#include<windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
  
  1 MessageBox(NULL, TEXT("Hello, win32"), TEXT("Hello from box"), MB_OK);
    
return 0;
}
syntax error : missing ';' before identifier 'MessageBoxW'

Добавлено через 1 минуту
visual studio 2008
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
20.03.2010, 20:42 #8
а зачем она тебе? Может, что попроще попробуем?
dev c++ я имею ввиду
0
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 21:09  [ТС] #9
C++
1
2
3
4
5
6
7
8
9
#include<windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
 
         MessageBox(NULL, TEXT("Hello, win32"), TEXT("Hello from box"), MB_OK);
        
return 0;
}
О! Вот этот вариант сработал в wxDev-C++!

Все хвалят VS2008 вот и я поставил (дело то нехитрое...). А что, она - не очень?
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
20.03.2010, 21:24 #10
В РУССКОЯЗЫНОЙ DEV С++ сработал бы и первый вариант
...Да кто её знает очень она или нет... Надо что попроще ставить для начала.
0
DeadRipper
64 / 70 / 9
Регистрация: 25.06.2009
Сообщений: 244
20.03.2010, 23:06 #11
Поставь все как было в книге)
только потом сделай так
Project -> Project Properties -> Configuration Properties -> General -> Character set -> Use Multi-Byte Character set

Это в меню студии
0
20.03.2010, 23:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2010, 23:06
Привет! Вот еще темы с решениями:

Hello, World!
Добрый день. Купил книгу Б.Страуструпа - Принципы и практика использования...

Hello world
почему в codeblocks программа #include &lt;iostream&gt; using namespace std; ...

HELLO WORLD
Vsem Privet:) Ranshe ya izuchil yizik PASKAL;:umnik: A tiper C++ :umnik: ...

Привет World
Написал 1-ый раз программу на студии 2005, в Win 32 project, программа не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru