Wer hilft beim debuggen?? (Anfänger-Progr.)
-
Hallo!
Diesmal gehts um folgendes: Ich ahbe mir da ein kleines Programm, für Windows geschrieben und kann die vom Compiler gemeldeten fehler nicht finden...Hier ein Ausschnitt, der die Fehlerquellen enthält.
könnt ihr vielleicht ein Blick auf den Code werfen?#include <windows.h> //Funktions - Prototypen: HWND WindowCreate(HINSTANCE g_hInstance, LPCTSTR className, LPCTSTR title, int left, int top, int height, int width); //Erzeugt ein Fenster VOID MsgBox(LPCTSTR message, LPCTSTR title, HWND hwnd); //Gibt eine Nachricht aus HWND CreateButton( HWND parenthwnd, HINSTANCE hApp, HMENU ID_BUTTON, LPCTSTR caption, int Left, int Top, int Height, int Width); //Erzeugt Buttons. //Globale Variablen... HINSTANCE hInstance; LPCTSTR AppTitle, ClassName; HWND hMain, hButton1, hButton2; const HMENU Button1_ID = 712; const HMENU Button2_ID = 700; ////////////////////////////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE hInstanceL,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { hInstance = hInstanceL; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(WNDCLASSEX); wndclass.style = 0; wndclass.lpfnWndProc = AppWndProc;// Die Funktion, die Nachrichten an das Fenster bearbeitet wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance;// Die Programm-Instanz wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);// Ein Icon für das Fenster wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);// Ein Cursor für das Fenster wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);// Ein Brush (Pinsel) für das Fenster wndclass.lpszMenuName = NULL;// Kein Menu wndclass.lpszClassName = ClassName;// Der Klassenname wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);// Noch ein Icon (klein) RegisterClassEx(&wndclass); hMain = WindowCreate (hInstance, ClassName, AppTitle, 200, 200, 500, 750); while( GetMessage(&msg, NULL, 0, 0) ) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam ; } ////////////////////////////////////////////////////////////////////// ////////////Funkrions - Definitionen: //////////////////////////////// ////////////////////////////////////////////////////////////////////// VOID MsgBox (LPCTSTR message, LPCTSTR title, HWND hwnd) { MessageBox (hwnd, message, title, MB_OK|MB_ICONINFORMATION); } /////////////////////////////////////////////////////////////////////// HWND CreateButton( HWND parenthwnd, HINSTANCE hApp, HMENU ID_BUTTON, LPCTSTR caption, int Left, int Top, int Height, int Width) { HWND hButton; hButton = CreateWindow(TEXT("BUTTON"),// Die Fensterklasse ("BUTTON" wurde schon registriert von Windows) TEXT(caption),// Der Text auf dem Button WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON,// Der Fenster-Stil Left, Top, Width, Height,// Die Fenster-Koordinaten (left, top, width, height) parenthwnd,// Das Mutterfenster (HMENU)ID_BUTTON,// Die ID hApp,// die Programm-Instanz NULL); return hButton; } //////////////////////////////////////////////////////////////////////// HWND WindowCreate (HINSTANCE g_hInstance, LPCTSTR className, LPCTSTR title, int left, int top, int height, int width) { HWND newhwnd; newhwnd = CreateWindow(g_lpszAppClass,// Der Fensterklassen-Name title,// Der Text in der Titelleiste WS_VISIBLE|WS_MINIMIZEBOX|WS_SYSMENU,// Der Fenster-Stil left, top, width, height,// Die Fenster-Abmessungen NULL,// Kein Mutterfenster NULL,// Kein Menu g_hInstance,// Die Programminstanz NULL);// Keine Extra-Daten return newhwnd; // HIER IST ZEILE 100 ! } ///////////////////////////////////////////////////////////////////////// LRESULT CALLBACK AppWndProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch(uiMsg) { case WM_CREATE: // ist gleich dem 'Form Load' aus VB hButton1 = CreateButton (hMain, hInstance, Button1_ID, TEXT("Knopf 1"),250, 350, 50, 120); hButton2 = CreateButton (hMain, hInstance, Button2_ID, TEXT("Knopf 2"),250, 50, 50, 120); return 0; case WM_COMMAND: switch( LOWORD(wParam) ) { case Button1_ID: if( HIWORD(wParam) == BN_CLICKED ) { MsgBox (TEXT("Sie haben den Beenden-Button gedrückt!"), TEXT("CU, ich verschwinde wieder!") ,hMain); SendMessage(hMain, WM_CLOSE, 0, 0);// Das Programm beenden }; break; case Button2_ID: if( HIWORD(wParam) == BN_CLICKED ) MsgBox (TEXT("Sie haben den Button 2 gedrückt!"), TEXT("MsgBox von B2") ,hMain); return 0; } } return DefWindowProc(hwnd, uiMsg, wParam, lParam); }
90% der Fehler sind laut Compiler (Borland 5.5) in der letzten Funktion.
Es werden insgesamt 8 fehler gemeldet.Hier die Fehlermeldung:
-----------------------------------------------------------------
*Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 BorlandC:\vp.cpp:
Error E2034 C:\vp.cpp 20: Cannot convert 'int' to 'HMENU__ *'
Error E2034 C:\vp.cpp 21: Cannot convert 'int' to 'HMENU__ *'
Error E2451 C:\vp.cpp 34: Undefined symbol 'AppWndProc' in function __stdcall
Error E2451 C:\vp.cpp 98: Undefined symbol 'g_lpszAppClass' in function WindowCreate(HINSTANCE__ *,const char *,const char *,int,int,int,int)
Error E2313 C:\vp.cpp 119: Constant expression required in function __stdcall AppWndProc(HWND__ *,unsigned int,unsigned int,long)
Error E2313 C:\vp.cpp 125: Constant expression required in function __stdcall AppWndProc(HWND__ *,unsigned int,unsigned int,long)
Error E2172 C:\vp.cpp 125: Duplicate case in function __stdcall AppWndProc(HWND__ *,unsigned int,unsigned int,long)
Error E2379 C:\vp.cpp 127: Statement missing ; in function __stdcall AppWndProc(HWND__ *,unsigned int,unsigned int,long)
*** 8 errors in Compile ****-------------------------------------------------------------------
-
Das sind doch ganz ersichtliche Fehler.
schonmal ein paar Hinweis:
const HMENU Button1_ID = (HMENU)712; const HMENU Button2_ID = (HMENU)700;
- AppWndProc zu den Prototypen hinzufügen.
- bei CreateWindow benutzt du eine Variable g_lpszAppClass die gar nicht exisitiert.So kriegt man es schonmal zum compilieren.
Aber dann läuft es trotzdem noch nicht
-
und ClassName würd ich noch einen Wert zuweisen. Dann kommt schonmal ein Fenster.
Kann es sein, das du sofort mit Winapi angefangen hast und dich nicht vorher mit C oder C++ beschäftigt hast?
-
ähhmm... ich fürchte der compiler macht mciht fertig!
Habe nun alles wie du sagtest, aber immer noch 5 fehler. und 5 warnungen. Kann nciht compilieren.
-
also darauf kann ihc gut mit jein antworten:
Habe seit nem jahr VB programmiert, und haben vor ner woche ein C++ buch durchgelesen. Praktisch habe ich ncihts weiter als nen einfachen String-Splitter und das Hello-World produziert...
-
ui dann vergiss winapi erstmal ganz schnell wieder.
das ist noch viel zu früh. ohne C Kenntnisse ist es zu schwer.
-
nee nee!!
Ich habe nix zu vergessen. Ich habe vor in nem Monat ne eigene Firewall zu schreiebn. Ich denk das schaff ich auch. Wenn man sich erst mal an ein projekt setzt und jedes kleine Hindernis nacheinander löst, kommt man IMMER am ziel an. Ich ahbe einfach zu schwache nerven um erst mal (ohne was zutun) 2 bücher zu fressen von je 1000 seiten um mich mal an die tastatur zu setzen. hbae sowieso schulischen drcuk auf mir. Mit C++ bau ich ab sozusagen;)Aber paar grundkenntnisse fehlen mir tatsächlich. das haste recht. DUMME Fehler wie funtionsprototypen-vergessen z.b sind banal. Erfordert halt seine zeit bis das automatisiert aus dem ff kommt.
Ich bitte um Verständnis. (kann mir vorstellen dass meine posts auf mache banal wirlen weil sie einfach keine 'klasse' haben. Aber irgendwo fängt man doch immer an..)
-
BreakerMaker. schrieb:
Ich habe vor in nem Monat ne eigene Firewall zu schreiebn. Ich denk das schaff ich auch. [...] Aber irgendwo fängt man doch immer an..)
In einem Monat hast Du keine Firewall geschrieben!
Sicherlich fängt man irgendwo an, aber sicherlich nicht bei einer Firewall (die einen eigenen Treiber erfordert, der jedes eingehende und abgehende Paket abfangen und anschauen muß).
In einem Monat kannst Du froh sein, wenn Du einen einfachen Datei-Explorer hinbekommst... noch dazu mit mangelhaften bis kaum vorhandenen Grundkenntnissen Marke "und haben vor ner woche ein C++ buch durchgelesen"...
-
Danke für die Motivation...
übrigens... bin gerade an nem Texteditor. Mach den erst mal fertig (hat dann auch DateiBrowser, speicher-, lösch, öffne-funktionen.)
Das mit der Firewall in nem Monat war vielleicht falsch ausgedrückt von mir. in nem monat werde ich damit !!!anfangen!!! nicht fertigstellen.PS: Lasst euch von C++ und den demagogen und pessimisten keine Angst machen. Programmiersprachen basieren auf Logik, d.h. es ist ausgeschlossen dass ein normal intelligneter mensch etwas nicht schafft. Wenn man wenn man erst mal was großen stressigen hinter sich hat, kann man die einfachen dinge schon im schlaf. Das ist der gute Seiteneffekt.
-
Wenn ich deine Fehler so sehe, denke ich mir das du nicht logisch denken kannst.
-
@Klugscheisser: Buffer Overflow????
@Mods: Könnt ihr diesen Thread bitte löschen. er belastet unnötig das forum und das problem mitm code ist schon längst gelöst.
MfG, BreakerMaker