C++ Problemmeldung im Microsoft Compiler!
-
Guten Abend,
ich programmiere im moment mit C++. Nun habe ich eine einfache Windows Anwendung programmiert! Das hat auch alles sehr gut geklappt! Doch es gab eine Fehlermeldung! Diese lautet: windows.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)" in Funktion "_WinMain@16".
C:\Dokumente und Einstellungen\Mark\Desktop\windows\Debug\windows.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Ich denke mein Quellcode ist auch noch wichtig!
Hier ist er:
#include <windows.h> #include <WinDef.h> LRESULT CALLBACK WindowsProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); //Hauptprogarmm int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow) { WNDCLASSEX windowsclass; HWND hWnd; MSG message; const wchar_t szClassName[] = L"Erstes Windows Fenster"; //Name des Fensters (Frei wählbar) windowsclass.cbSize = sizeof (WNDCLASSEX); windowsclass.style = CS_HREDRAW | CS_VREDRAW; //Befehl zum neuschreiben des Fensters, bei verschiebung windowsclass.lpfnWndProc = WindowsProc; windowsclass.cbClsExtra = 0; //Beschreibt die erweiterten windowsclass.cbWndExtra = 0; //Einstellungen, hier werden keine benötigt windowsclass.hInstance = hInst; //Instanz speichern windowsclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; windowsclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; //Icons und Cursor festlegen windowsclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; windowsclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1; //Hintergrundfarbe des Fensters festlegen windowsclass.lpszMenuName = NULL; //Menü festlegen, ich brauche keins windowsclass.lpszClassName = szClassName; //Klassenname angeben if (!RegisterClassEx (&windowsclass) ) return (0); hWnd = CreateWindowEx (NULL, szClassName, L"Erstes Windows Fenster", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 250, NULL, NULL, hInst, NULL); if (hWnd == NULL) //Prüfen auf richtigkeit return (0) ; while (GetMessage (&message, NULL, 0, 0) ) { TranslateMessage (&message); //hiermit werden alle Nachrichten übersetzt!!! DispatchMessage (&message); } return (int) (message.wParam); //Programm beenden } //Ende von WinMain //Callbackfunktion zur Nachrichtenverarbeitung // LRESULT CALLBACK WindowsProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) //Messages auswerten { case WM_DESTROY: //Programm beenden? { PostQuitMessage (0); //Nachricht zum beenden schicken return (0); } case WM_KEYDOWN: //Taste gedrückt??? { switch(wParam) //Ja, je nach Taste verzweigen { case VK_ESCAPE: //Wurde "Escape" gedrückt { PostQuitMessage (0); //Ja, also Nachricht zum beenden drücken return (0); } } } break; } return (DefWindowProc (hWnd, message, wParam, lParam) ); //Wenn Nachricht nicht vom Programm verwaltet, dann von Windows! }So das wärs! Ich hoffe auf eine Antwort!
MFG
Mark
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo Mark,
der Code, so wie er hier steht, sollte keine Probleme machen. Die Fehlermeldung des Compilers macht mich ein wenig stutzig, eine Funktion namens WndProc sucht man vergeblich.
Hast du vielleicht im nachhinein (also vor dem Posten hier) die Funktionsnamen geändert?
-
Nein geändert habe ich gar nichts!

-
Bitte!!! Ich brauche Hilfe!!!
-
Kommen ähnliche Fehlermeldungen nicht, wenn das in der IDE gewählte Projekt nicht zum Quelltext passt?
Also eine Bibliothek wird gar nicht oder falsch zum Projekt gelinkt?MfG f.-th.
-
Wie yahendirk schon sagte: Wo mit dem Code eine Funktion WndProc() herkommen soll, ist mir schleierhaft. Du verwendest hier durchgängig die Bezeichnung WindowsProc - und soweit ich das sehe, sind die Parameter auch in Ordnung. Also bleibt nur die Vermutung, daß du irgendwas unterschlagen hast.
(oder du wartest, bis die WinAPI-Experten hier auftauchen und dir das selbe sagen)
-
Durchsuch einfach mal dein ganzes Projekt nach "WndProc" weil irgendwo muss der Fehler ja herkommen. Eventuell auch einfach mal alles löschen und neu kompilieren lassen. Vielleichts hilfts ja, Viel Glück

-
-
Meine Vermutung war im ersten Moment Folgendes:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); ... windowsclass.lpfnWndProc = WndProc; ... LRESULT CALLBACK WindowsProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { .. }Anders kann ich mir den Linkerfehler nicht erklären...
-
Wir können ja raten. Ich hab kein VS am Start tippe aber auf:
Wenn bei C++-Projekten aus früheren Versionen, die auf die aktuelle Version aktualisiert wurden, __UNICODE definiert wurde und der Einstiegspunkt WinMain war, müssen Sie den Namen der Einstiegspunktfunktion entweder in _tWinMain oder _tmain ändern.
aus dem MSDN.
Also entweder im Projekt am Unicode was ändern oder Zeile 8: _t ergänzen.
Der gcc übersetzt das Original mit Warnungen - aber da wird VS wohl grosszügig sein.
MfG f.-th.
-
Habe das ganze gerade in ein VS2010 Projekt kopiert und es hat absolut keine Probleme damit. Das Programm läuft nach dem kompilieren, was ja auch zu erwarten war ...
Ich würde empfehlen beim Compilieren "neu erstellen" zu wählen, oder das Projekt mal komplett neu anzulegen.