Форум программистов, компьютерный форум CyberForum.ru

Hello World и API - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 17:18     Hello World и API #1
Здравствуйте! Из книги по 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-м примером дальше читать книгу смысла не вижу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2010, 17:18     Hello World и API
Посмотрите здесь:

C++ HELLO WORLD
Hello, World! C++
C++ Hello, World!
C++ Hello World!
Hello world C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cepera
 Аватар для Cepera
52 / 52 / 1
Регистрация: 09.03.2009
Сообщений: 178
20.03.2010, 17:53     Hello World и API #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;
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
20.03.2010, 18:02     Hello World и API #3
zayaz, парень, ты всё сделал правильно. Но, понимаешь, прототипы функций (а нас щас интересуют типы параметров для кажой среды свои)

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

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

C++
1
2
[FONT=monospace]MessageBox(NULL, (LPCWSTR)"Hello, win32", "Hello from box", MB_OK);
[/FONT]
Вот здесь про типы подробно
Cepera
 Аватар для Cepera
52 / 52 / 1
Регистрация: 09.03.2009
Сообщений: 178
20.03.2010, 18:27     Hello World и API #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);
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 20:37  [ТС]     Hello World и API #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
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
20.03.2010, 20:39     Hello World и API #6
Ты какой средой пользуешься?
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 20:40  [ТС]     Hello World и API #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
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
20.03.2010, 20:42     Hello World и API #8
а зачем она тебе? Может, что попроще попробуем?
dev c++ я имею ввиду
zayaz
6 / 6 / 1
Регистрация: 13.03.2010
Сообщений: 34
20.03.2010, 21:09  [ТС]     Hello World и API #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 вот и я поставил (дело то нехитрое...). А что, она - не очень?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
20.03.2010, 21:24     Hello World и API #10
В РУССКОЯЗЫНОЙ DEV С++ сработал бы и первый вариант
...Да кто её знает очень она или нет... Надо что попроще ставить для начала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2010, 23:06     Hello World и API
Еще ссылки по теме:

Hello world C: C++
Hello world C++
Hello world C++

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

Или воспользуйтесь поиском по форуму:
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
20.03.2010, 23:06     Hello World и API #11
Поставь все как было в книге)
только потом сделай так
Project -> Project Properties -> Configuration Properties -> General -> Character set -> Use Multi-Byte Character set

Это в меню студии
Yandex
Объявления
20.03.2010, 23:06     Hello World и API
Ответ Создать тему
Опции темы

Текущее время: 09:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru