ОБСУЖДЕНИЕ

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

10 ответов 7,2 тыс.
Автор темы
Помогите пожалуйста создать первый проект под 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

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

int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpCmdLine, int nCmdShow )
{
MessageBox( NULL, "Ты прекрасен!", "Здраствуй, Мир!", MB_OK );
return 0;
}
 
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);
 
Все в точности как описал lazybiz , но у тебя еще есть одна проблема у тебя подключен Юникод ;-)
Может лучше показать человеку, где в свойствах студии включается Юникод? А не учить его плохому
 
Зато отднозначный вызов A или W
или
#define однозначное определение
Хороший является хорошим тоном, и удаляет пробелы в понимании работы с Win-Api....

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

Вложения

  • uni.jpg
    uni.jpg
    87,6 КБ · Просмотры: 693
European , Euro, Майкрософт вообще заявила, пишите все с Юникоде... :-)
И ты знаешь, отчасти они правый... Я щас на 7ки сижу... И в консольном приложении заголовок окна поменять с Ansi вызовом уже не прокатывает.... Сам в шоке правда был..
C++:
void main(void)
{
setlocale(LC_ALL,"Russian");
SetConsoleTitleW(L"Игра 'Веселые кости'");
srand(time(NULL));
 
По-моему автора темы и след простыл... Может стоит ее закрыть!?