Компиляция в visual studio 2010

Тема в разделе "WASM.BEGINNERS", создана пользователем sheetja, 24 июл 2010.

  1. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Всем привет. Сразу хотелось бы сказать - не кидайтесь помидорами, все когда то начинали. Итак, вот в чем моя проблема: я не могу понять, как откомпилить прогу. Объясните пожалуйста пошагово.

    Проблема:

    Хочется откомпилировать этот кусок кода:

    Код (Text):
    1. #include <windows.h>
    2.  
    3. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
    4. {
    5.     MessageBox(NULL, "Сказала собака баскервилей.", "Ну, здравствуй, Герасим.", MB_OK|MB_ICONEXCLAMATION);
    6.     return 0;
    7. }
    Как это сделать? Куда жать?:) Файл - создать - проект - а дальше куда???
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    С общем так: File - New - Project - VisualC++ - Win32Project там вписываете имя - test например
    Создается полно всякой всячины - в общем удаляете в таком списке слева все кроме test.cpp который выносите из папки.
    Туда заливаете этот свой код только вместо MessageBox пишите MessageBoxA или приводите строки к виду L"строка"
    далее Project - Properties - C/C++ - precompiled headers - precompiled header - not using precompiled header
    потом linker - advanced - entry point - WinMain вписываете
    и конпеилируете...
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ох как сложно)
    достаточно
    файл - создать - проект - Visual C++ - Win32 - Win32 Project
    на странице настроек проекта ставите галку "пустой проект"
    тогда не будет никаких лишних файлов которые надо удалять, и precompiled header

    WinMain вписывать не обязательно, разве чтобы избавитьcя от CRT
     
  4. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    GoldFinch
    классно, не знал такой фичи
     
  5. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    И??? Пишет внизу "проект создан", но ни окна ввода кода, ничего нет!

    Плин! Я это окошко со списком закрыл и где теперь его открывать???

    Вопщем как то откомпилел, но...

    Код (Text):
    1. 1>  Создание "Debug\yghjkl.unsuccessfulbuild", так как было задано "AlwaysCreate".
    2. 1>LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup"
    3. 1>c:\users\k\documents\visual studio 2010\Projects\yghjkl\Debug\yghjkl.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
    4. 1>
    5. 1>СБОЙ построения.
    6. 1>
     
  6. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    view - solution explorer
    project - add new item - cpp file
    linker - advanced - entry point - WinMain вписываете
     
  7. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Так, то что надо по ходу... А можно теперь это все по-русски???

    файл правка вид проект построение отладка рабочая группа данные сервис архитектура тест анализ окно справка
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    sheetja
    По делу: не позорьтесь, cкачайте или купите уже учебник по VS.

    З.Ы. Уж больно вы похожи на главного героя фильма "Электроник", не хотите приложить даже минимум усилий.
     
  9. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Я и так прикладываю, LINKER - пререводится как КОМПОНОВЩИК! У меня НЕТ такой вкладки!
     
  10. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Я все нашел: проект - свойства - дополнительно - точка вхда. Вписал WinMain и все так же:

    Код (Text):
    1. 1>LINK : error LNK2001: неразрешенный внешний символ "_WinMain"
    2. 1>c:\users\k\documents\visual studio 2010\Projects\yghjkl\Debug\yghjkl.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
    3. 1>
    4. 1>СБОЙ построения.
    5. 1>
     
  11. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Вот еще какая проблемка... Код такой:

    Код (Text):
    1. // GT_HelloWorldWin32.cpp
    2. // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c
    3.  
    4. #include <windows.h>
    5. #include <stdlib.h>
    6. #include <string.h>
    7. #include <tchar.h>
    8.  
    9. // Global variables
    10.  
    11. // The main window class name.static TCHAR szWindowClass[] = _T("win32app");
    12.  
    13. // The string that appears in the application's title bar.static TCHAR szTitle[] = _T("Win32 Guided Tour Application");
    14.  
    15. HINSTANCE hInst;
    16.  
    17. // Forward declarations of functions included in this code module:
    18. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    19.  
    20. int WINAPI WinMain(HINSTANCE hInstance,
    21.                    HINSTANCE hPrevInstance,
    22.                    LPSTR lpCmdLine,
    23.                    int nCmdShow)
    24. {
    25.     WNDCLASSEX wcex;
    26.  
    27.     wcex.cbSize = sizeof(WNDCLASSEX);
    28.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
    29.     wcex.lpfnWndProc    = WndProc;
    30.     wcex.cbClsExtra     = 0;
    31.     wcex.cbWndExtra     = 0;
    32.     wcex.hInstance      = hInstance;
    33.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    34.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    35.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    36.     wcex.lpszMenuName   = NULL;
    37.     wcex.lpszClassName  = szWindowClass;
    38.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    39.  
    40.     if (!RegisterClassEx(&wcex))
    41.     {
    42.         MessageBox(NULL,
    43.             _T("Call to RegisterClassEx failed!"),
    44.             _T("Win32 Guided Tour"),
    45.             NULL);
    46.  
    47.         return 1;
    48.     }
    49.  
    50.     hInst = hInstance; // Store instance handle in our global variable
    51.  
    52.     // The parameters to CreateWindow explained:
    53.     // szWindowClass: the name of the application
    54.     // szTitle: the text that appears in the title bar
    55.     // WS_OVERLAPPEDWINDOW: the type of window to create
    56.     // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)
    57.     // 500, 100: initial size (width, length)
    58.     // NULL: the parent of this window
    59.     // NULL: this application does not have a menu bar
    60.     // hInstance: the first parameter from WinMain
    61.     // NULL: not used in this application
    62.     HWND hWnd = CreateWindow(
    63.         szWindowClass,
    64.         szTitle,
    65.         WS_OVERLAPPEDWINDOW,
    66.         CW_USEDEFAULT, CW_USEDEFAULT,
    67.         500, 100,
    68.         NULL,
    69.         NULL,
    70.         hInstance,
    71.         NULL
    72.     );
    73.  
    74.     if (!hWnd)
    75.     {
    76.         MessageBox(NULL,
    77.             _T("Call to CreateWindow failed!"),
    78.             _T("Win32 Guided Tour"),
    79.             NULL);
    80.  
    81.         return 1;
    82.     }
    83.  
    84.     // The parameters to ShowWindow explained:
    85.     // hWnd: the value returned from CreateWindow
    86.     // nCmdShow: the fourth parameter from WinMain
    87.     ShowWindow(hWnd,
    88.         nCmdShow);
    89.     UpdateWindow(hWnd);
    90.  
    91.     // Main message loop:
    92.     MSG msg;
    93.     while (GetMessage(&msg, NULL, 0, 0))
    94.     {
    95.         TranslateMessage(&msg);
    96.         DispatchMessage(&msg);
    97.     }
    98.  
    99.     return (int) msg.wParam;
    100. }
    101.  
    102. //
    103. //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
    104. //
    105. //  PURPOSE:  Processes messages for the main window.//
    106. //  WM_PAINT    - Paint the main window
    107. //  WM_DESTROY  - post a quit message and return
    108. //
    109. //
    110. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    111. {
    112.     PAINTSTRUCT ps;
    113.     HDC hdc;
    114.     TCHAR greeting[] = _T("Hello, World!");
    115.  
    116.     switch (message)
    117.     {
    118.     case WM_PAINT:
    119.         hdc = BeginPaint(hWnd, &ps);
    120.  
    121.         // Here your application is laid out.// For this introduction, we just print out "Hello, World!"
    122.         // in the top left corner.TextOut(hdc,
    123.             5, 5,
    124.             greeting, _tcslen(greeting));
    125.         // End application-specific layout section.EndPaint(hWnd, &ps);
    126.         break;
    127.     case WM_DESTROY:
    128.         PostQuitMessage(0);
    129.         break;
    130.     default:
    131.         return DefWindowProc(hWnd, message, wParam, lParam);
    132.         break;
    133.     }
    134.  
    135.     return 0;
    136. }
    Ошибка вот:

    Код (Text):
    1. 1>  Создание "Debug\80.unsuccessfulbuild", так как было задано "AlwaysCreate".
    2. 1>LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup"
    3. 1>c:\users\k\documents\visual studio 2010\Projects\80\Debug\80.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
    4. 1>
    5. 1>СБОЙ построения.
    6. 1>
    Народ, что не так делаю?
     
  12. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    2sheetja
    Booster по любому прав - изначально книжечка...

    ну а так что бы погасить твой стартовый интерес:

    File->New->Project->Win32->EmptyProject(checkbox);
    SolutionExplorer-> AddFile(.cpp);
    пример файла(без использования CRT):
    Код (Text):
    1. #include <windows.h>
    2.  
    3. DWORD __stdcall main( void )
    4. {
    5.    MessageBox( NULL, L"TEST", L"TEST", MB_OK);
    6.    return 0;
    7. }
    что бы заработало нужно вырубить CRT и указать точку входа как тебе советовали выше. Вообщем сам пишу исключительно без CRT, но тебе лучше его юзать(для начала), поэтому когда создал empty project и добавил пустой файл впиши туда(не меняя точку входа):
    Код (Text):
    1. #include <windows.h>
    2.  
    3. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
    4. {
    5.     MessageBox(NULL, "Сказала собака баскервилей.", "Ну, здравствуй, Герасим.", MB_OK|MB_ICONEXCLAMATION);
    6.     return 0;
    7. }
    и нажми F5.)
    вроде от тебя больше ничего не требуеться....

    если захочешь отказаться от CRT - надо будет сделать несколько шагов по настройке прожекта.
    все выше описаное справедливо(если не ошибся где случайно) для VisualStudio2008.
     
  13. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    sometime

    Скачал ее,скачал...

    Пробовал оба твои кода - один фиг не компилится!!! И одна и таже ошибка(все сделал как ты сказал)

    Код (Text):
    1. 1>LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup"
    Это ппц какой то...
     
  14. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    у тебя либа не подключена! не знаю как называется CRT-шная либа, но такое встречалось когда отключены дефаулт либрариес в настройках прожа!
    Project->"proj name" properties->linker->input->IgnoreAllDefaultLibraries = NO
    должно быть так.

    как их включить прагмами - хз, можешь порыть в инете
    "VisualStudio2010 LNK2001 _WinMainCRTStartup"
    -ухты! сколько ответов!!!! и что самое главное СРАЗУ,а не ждать ответа на форуме....

    запомни - от ныне твой друг google.com
     
  15. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    sometime

    Ок, спасибо тебе, буду смотреть...
     
  16. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Решение нашлось! Надо было включить в заголовочные файлы #include "stdafx.h"
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    стоит наверно посты читать иногда =)
     
  18. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Скажи мне, в каком посте мне говорили, что надо включить stdafx.h ???
     
  19. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ну хотя бы во втором и третьем.
     
  20. sheetja

    sheetja New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    41
    Видимо, в иносказательной форме:)