Первый проект Microsoft Visual Studio 2008

  • Автор темы protur
  • Дата начала
P

protur

#1
Помогите пожалуйста создать первый проект под Windows. Не могу скомпилировать не один пример, даже такой простой. Новый проект: File->New->Project->Win32Project
#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, PTSTR,int){
MessageBox(0, "Здраствуй, Мир!", "Ты прекрасен!", 0);
return 0;
}

Не компилируется, вот ошибки:
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(3) : error C2731: 'WinMain' : function cannot be overloaded
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(3) : see declaration of 'WinMain'
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(4) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [16]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Заранее спасибо
 
20.10.2010
16
0
#2
По-моему, чтоб использовать winmain в таком виде надо сообщить компилятору, что уже есть точка входа:
#pragma comment(linker,"/ENTRY:WinMain")
Ну, или типа того. А в messagebox просто параметры не верны. Смотрите внимательнее справку. Как то так. К сожалению студии под рукой нет, поэтому проверить правильность своих утверждений пока не могу.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
protur
Попробуй вот так:
C++:
#include <windows.h>

int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpCmdLine, int nCmdShow )
{
MessageBox( NULL, "Ты прекрасен!", "Здраствуй, Мир!", MB_OK );
return 0;
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
MessageBox(0, "Здраствуй, Мир!", "Ты прекрасен!", 0);
Все в точности как описал lazybiz , но у тебя еще есть одна проблема у тебя подключен Юникод ;-)
Так что вызывай
C++:
MessageBoxA(0, "Здраствуй, Мир!", "Ты прекрасен!", 0); //Это анси-версия, либо отключай Юникод,
//либо
#define MessageBox MessageBoxA
Добавлено: Либо все же в Юникоде :)
C++:
MessageBoxW(NULL,L"Test",L"test",MB_OK);
MessageBox(NULL,L"Test",L"test",MB_OK);
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
Зато отднозначный вызов A или W
или
#define однозначное определение
Хороший является хорошим тоном, и удаляет пробелы в понимании работы с Win-Api....

На скрине показанно где определяется Ansi для проекта (жаль только русская версия есть)
 

Вложения

  • 167.7 КБ Просмотры: 41

DarkKnight

Well-known member
01.08.2010
653
0
#10
European , Euro, Майкрософт вообще заявила, пишите все с Юникоде... :)
И ты знаешь, отчасти они правый... Я щас на 7ки сижу... И в консольном приложении заголовок окна поменять с Ansi вызовом уже не прокатывает.... Сам в шоке правда был..
C++:
void main(void)
{
setlocale(LC_ALL,"Russian");
SetConsoleTitleW(L"Игра 'Веселые кости'");
srand(time(NULL));
 

lazybiz

Well-known member
03.11.2010
1 339
0
#11
По-моему автора темы и след простыл... Может стоит ее закрыть!?