Was mache ich falsch?
-
Hallo, mal alle zusammen.
Ich habe einige Kurse für Programmieren mit C und C++ besucht, da haben wir meistens mit Konsolenanwendungen gelernt und geübt, funktioniert auch alles ganz gut. Jetzt habe ich es mit der Windows-Programmierung gewagt. Leider habe ich da einige Anfängerprobleme und ich hoffe jemand kann mir weiter helfen. Ich schreibe ein Programm im Editor, das Kompilieren und das Ausführen funktioniert beim ersten mal auch alles. Beim nächsten öffnen des Programms funktioniert das Kompilieren auch, aber beim Ausführen kommen mir immer wieder die zwei linker Fehler.LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/HelloWindows.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.Was mache ich da falsch? Danke.
-
tja poste doch mal den code... und dann ist da noch eine sache, warum hast du nicht in die abteilung windows-programmierung aka winapi gepostet?
-
Ich kann den Code ja mal posten, aber das Problem habe ich bei jeder Anwendung egal wie klein sie ist.
// ---------------------------------------------------------------------------- // DEFINES -------------------------------------------------------------------- #define WINDOW_CLASS_NAME "Game Shell Window" #define WIN32_LEAN_AND_MEAN // INCLUDES ------------------------------------------------------------------ #include <windows.h> // MACROS --------------------------------------------------------------------- #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // GLOBALS -------------------------------------------------------------------- HWND main_window_handle = NULL; HINSTANCE hinstance_app = NULL; // Funktionsprototypen für den Spielablauf ------------------------------------ void Game_Shutdown(void); void Game_Init(void); void Game_Main(void); // Funktionsdefinitionen ---------------------------------------------------- LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { PAINTSTRUCT ps; HDC hdc; // Nachrichtenverarbeitung switch(msg) { case WM_CREATE: { return(0); } break; case WM_PAINT: { hdc = BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); return(0); } break; case WM_DESTROY: { PostQuitMessage(0); return(0); } break; default: break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); } // ---------------------------------------------------------------------------- int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX winclass; HWND hwnd; MSG msg; // Fenstereigenschaften festlegen: winclass.cbSize = sizeof(WNDCLASSEX); winclass.style = CS_HREDRAW | CS_VREDRAW ; winclass.lpfnWndProc = WindowProc; winclass.cbClsExtra = 0; winclass.cbWndExtra = 0; winclass.hInstance = hinstance; winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); winclass.lpszMenuName = NULL; winclass.lpszClassName = WINDOW_CLASS_NAME; winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); hinstance_app = hinstance; if (!RegisterClassEx(&winclass)) return(0); if (!(hwnd = CreateWindowEx(NULL, WINDOW_CLASS_NAME, "My Game Shell", WS_OVERLAPPEDWINDOW | WS_VISIBLE , 0,0, 800,600, NULL, NULL, hinstance, NULL))) return(0); main_window_handle = hwnd; Game_Init(); // Nachrichtenweiterleitung while(TRUE) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } Game_Main(); } Game_Shutdown(); return(msg.wParam); } // ---------------------------------------------------------------------------- void Game_Init(void) {} // ---------------------------------------------------------------------------- void Game_Main(void) { // Mit ESC kann die Anwendung verlassen werden if (KEYDOWN(VK_ESCAPE)) SendMessage(main_window_handle,WM_CLOSE,0,0); } // ---------------------------------------------------------------------------- void Game_Shutdown(void) {}Ich weis aber nicht ob das was Bringt
-
Du darfst es halt nicht Konsolenanwendung auswählen.
-
Habe ich auch nicht, ich habe mit: Win32-Anwendung -> Ein leeres Projekt erstellen, danach: Projekt -> Dem Projekt hinzufügen -> Neu -> C++ Quellcodedatei. Es funktionier ja auch alles Kompilieren und Ausführen, nur nachdem ich das Programm schließe und danach wieder öffne, kompiliert es, bringt 0 Fehler und 0 Warnungen, danach beim Ausführen 2 Fehler und Null Warnungen, eben die Fehler die ich bereits erwähnt habe.
-
Öffnest du beim 2.Mal die Projekt-Datei oder lediglich die
Quelltextdatei?
Wenn du lediglich die Quelltextdatei öffnest, kommt es
zu Fehlermeldungen, weil die Projektdatei noch
Informationen enthält, die der Linker benötigt.Gruß,
DC
-
Hi, Es stimmt, ich habe bis jetzt immer nur die Quelltextdatei geöffnet. Jetzt habe ich es mit dem Arbeitsbereich probiert und es funzt. Super, Danke.