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

Тема в разделе "MS Visual C++", создана пользователем protur, 4 сен 2010.

  1. protur

    protur Гость

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

    Заранее спасибо
     
  2. demetrius2003

    demetrius2003 Member

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    protur
    Попробуй вот так:
    Код (C++):
    #include <windows.h>

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    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);
     
  5. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Может лучше показать человеку, где в свойствах студии включается Юникод? А не учить его плохому
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Зато отднозначный вызов A или W
    или
    #define однозначное определение
    Хороший является хорошим тоном, и удаляет пробелы в понимании работы с Win-Api....

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

    Вложения:

    • uni.jpg
      uni.jpg
      Размер файла:
      167,7 КБ
      Просмотров:
      41
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Так половину функций WinAPI придется передефайнить. Это хороший тон?
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Почему половину... Только те которые используешь....
    Ну или писать сразу в Уникоде :)
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Я имел в виду, что с ростом сложности проекта, количество функций растет. И таких дефайнов, соответственно, тоже
     
  10. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    По-моему автора темы и след простыл... Может стоит ее закрыть!?
     
Загрузка...

Поделиться этой страницей