2016-06-22 8 views
0

So bin ich derzeit stecken zu versuchen, die Windows API zu bekommen (Sprache ist C++), wenn ich versuche, das Programm zu starten, bekomme ich die folgenden Fehler. (obwohl ich nun Fehler bezüglich der roten Unterstreichung bekomme). Ich verwende derzeit Visual Studio Community als meine IDE.Stuck bekommen Windows.h zu arbeiten, keine Fehlermeldung bis zum Kompilieren.

„nicht aufgelöstes externes Symbol _main Referenz in der Funktion "int _cdel aufrufen (main (void))"

"1 gelöst Externen"

ich bereits online überprüft haben, und versucht, es sowohl als Gewinn 32 console program und win 32 project (die einige als Möglichkeit zur Auflösung des Programms aufgelistet haben.) Allerdings keine Ergebnisse, ich habe keine Ahnung, was der Fehler sein könnte (auch als Referenz verwende ich das folgende Tutorial als Startbasis) https://www.youtube.com/watch?v=012pFrYE5_k, aber ich benutze nicht die offene GL-Bibliothek, da alles, was ich zu erreichen versuche, eine sehr vereinfachte Vorlage eines win32-Fensters ist. Jede Idee ist?

Code: main.h

#pragma once 
#pragma once 
#include<Windows.h> 
#include<tchar.h> 
#include<iostream> 
#define WINDOW_WIDTH = 800 //remember to leave off the ; at the end of define sets(currently not being used 
#define WINDOW_HEIGHT = 600 
HWND hWnd; 

Code: main.cpp

#include "main.h" //remember <> means library, "" means within your project. 
// long results, CALL BACK, windows procedure, basically the basics of what to do. UINT (unsigned INT) 
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { 
    switch (msg) { 
    case WM_CREATE: 
     break; 
    case WM_DESTROY: 
    case WM_QUIT: 
    case WM_CLOSE: 
     PostQuitMessage(0); 
     break; 
    } 
    return DefWindowProc(hWnd, msg, wParam, lParam); 
} 
/* 
remember that this is a run time instance, and is in essence the same as Main (char[args]) {} 
returning 0 ends the operation of the win32 library. 
*/ 
int WINAPI winMain(HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpCmdLine, int nCmdShow) 
{ 
    WNDCLASS wc; //default instance for the scope of the window (new window named WC for WINDOW CLASS) 
    MSG msg; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); //default background color, set to stock light gray 
    wc.hCursor = LoadCursor(hInstance, IDC_ARROW); //default cursor 
    wc.hInstance = hInstance; 
    wc.lpfnWndProc = WndProc; 
    wc.lpszClassName = _T("NAME"); 
    wc.lpszMenuName = NULL; 
    wc.style = CS_VREDRAW | CS_HREDRAW; //windows style in bit form, 0X00 hex if you were to print them 
    if (!RegisterClass(&wc)) //pointer the to the window, if it doesn't exist call this simple error handle 
    { 
     MessageBox(NULL, _T("error: cannot reg window class"), _T("error"), MB_OK); 
     return 0; // kills 
    } 
    hWnd = CreateWindow(L"NAME", //reference of the object already defined as wc 
     L"Window Title", //title 
     WS_OVERLAPPEDWINDOW, //basic window style 
     0, //x start, 
     0, //y start, 
     800, 
     600,  //set all the dimensions to default value 
     NULL,    //no parent window 
     NULL,    //no menu 
     hInstance, 
     NULL); 
    if (!hWnd) 
    { 
     MessageBox(NULL, L"ERROR: cannot create window", L"ERROR!", MB_OK); 
     return 0; 
    } 
    while (1) 
    { 
     while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { 
      if (GetMessage(&msg, NULL, 0, 0)) 
      { 
       break; 
      } 
     } 
     DispatchMessage(&msg); 
     TranslateMessage(&msg); 
    } 
    return(int)msg.wParam; 
} 
+0

Ihre Nachricht Schleife ungerade ist eher. Verwenden Sie die Standardschleife. Warum schreibe '#pragma einmal 'zweimal? Das Deklarieren von 'hWnd' in der Header-Datei wird Sie zurückbringen. Tu das nicht. Sie haben mehrere Instanzen, die nicht Ihren Vorstellungen entsprechen. Sie möchten in diesen Tagen nicht 'tchar' verwenden. Sie unterstützen Windows 98 nicht. –

+0

TranslateMessage() geht vor DispatchMessage(), nicht nach. – andlabs

+0

Das ist ziemlich kaputter Code, ich werde nicht auf all das hinweisen, was falsch ist. Um das Problem sofort zu beheben, gehen Sie wie folgt vor: Gehen Sie in den Projekteinstellungen zu * Allgemein * und wählen Sie * "Unicode-Zeichensatz verwenden" *. Wählen Sie auf der Registerkarte Linker-Einstellungen * System * und ändern Sie das Subsystem in * "/ SUBSYSTEM: WINDOWS" *. Ersetzen Sie den Funktionsnamen 'winMain' durch' wWinMain'. Das wird deine ausführbare Datei verlinken. Es wird jedoch zur Laufzeit schrecklich brechen. – IInspectable

Antwort

2

In main.cpp, müssen Sie den Namen der Funktion nutzen: int WINAPI WinMain

Verwandte Themen