Komisches Problem mit Degub und ohne ?!
-
Also morgen erstmal und sorry für den dummen Topicnamen, aber ich weiss nicht wie ichs sagen soll.
Ich prorgammiere im Moment einen Client. So ich sitz da also mit meinem Visual Studio, drück dann halt F5 und alles wird gestartet. Da der passende Server auch von mir ist, wollte ich jetzt mal 2 Clients starten, aber das geht ja nicht mit F5. Also rein ins Debug Verzeichnis und Client starten.
Tja, war wohl nichts, mein Programm stürzt knadenlos ab. Starte ich aber aus VC++ heraus, keine Probleme
Also hier mal n bissl Quelltext, ich weiss theoretisch auch wo der Fehler liegt, gleich mehr dazu:
//////////// // includes // global #include <winsock2.h> // intern #include "resource.h" #include "startdlg.h" #include "../server/server.h" // public HINSTANCE hPubInst; HWND hSockWnd; const char szClassname[]="luci"; // message handling LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // private WORD wEvent; WORD wError; // switch switch(uMsg){ // on create case WM_CREATE: // show dialog CreateDialog(hPubInst, MAKEINTRESOURCE(DLG_START), NULL, (DLGPROC)StartDlgProc); return 0; // on socket event case LUNATIC_SOCKEVENT: wEvent = WSAGETSELECTEVENT(lParam); wError = WSAGETSELECTERROR(lParam); HandleSocketEvent((SOCKET)wParam, wEvent); return 0; } // return default return DefWindowProc(hWnd, uMsg, wParam, lParam); } // winapi entry point int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nShowCmd) { // private WNDCLASSEX wc; MSG msg; HWND hWnd; // make public hPubInst = hInstance; // load dlls for richedit-control LoadLibrary("riched32.dll"); // prepare struct wc.style = 0; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = NULL; wc.hCursor = NULL; wc.hIcon = NULL; wc.lpszMenuName = NULL; wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = szClassname; wc.cbSize = sizeof(WNDCLASSEX); wc.hIconSm = NULL; // register class RegisterClassEx(&wc); MessageBox(0, "DEBUG #1", 0, 0); // create window hWnd = CreateWindow(szClassname, "", 0, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0, 0, hInstance, 0); MessageBox(0, "DEBUG #2", 0, 0); if(hWnd) // make public hSockWnd = hWnd; else return 0; // msg loop while(GetMessage(&msg, 0, 0, 0)){ TranslateMessage(&msg); DispatchMessage(&msg); } // quit return 0; }
So, die Messagbox mit "DEBUG #1" wird noch angezeigt die 2te mit "DEBUG #2" nicht mehr, davor kommt dieses Windows-Fenster: http://www.brain-death.net/error00.jpg
dann drück ich auf "Abbrechen", weil ich ja debuggen will und dann kommt das hier: http://www.brain-death.net/error01.jpg
dann wieder auf "Abbrechen" und es kommt http://www.brain-death.net/debug00.jpg
Also ich find das alles sehr verwirrend, weil schließlich alles über den VC++ einwandfrei läuft.
Man stelle sich mal vor, man entwickelt ein Mega-Projekt, alles läuft wunderbar, händigt sein Projekt aus und nichts läuft, dass ist doch mies
PS: Es ist egal ob ich Debug oder Release compilier...
Hoffentlich kann mir jemand helfen...
ciao para
-
oh man da steht doch der fehler. die datei konnte nicht geöffnet werden. (weil die pfade, wenn du dein programm aus der IDE startest, anders sind als sonst)
-
Ja klasse, wie kann ich das ändern, ich mein, das war noch nie so....
-
das ist schon immer so!! mit GetModuleFileName den pfad der exe ermitteln.
-
Das gibt doch keinen Sinn, erstens stürzt das Programm bei einem CreateWindow ab und zweitens ist mein Programm auf überhaupt keine Pfade/Dateien angewiesen und sollte in jedem x-beliebigen Verzeichniss laufen. Davon mal abgesehen, wenn man Programm irgentwas mit Pfaden/Dateien machen würde, dann dürfte es wohl kaum bei einem CreateWindow abstürzen, oder?
ciao
-
Original erstellt von <qwerqwer>:
das ist schon immer so!! mit GetModuleFileName den pfad der exe ermitteln.Wozu denn? Um dann das Ergebnis beim ersten Parameter von CreateWindow anzugeben oder was?
-
ne bei fopen !!!!!!!!!
-
Ich benutz überhaupt kein fopen, wie oft noch, der Fehler tritt bei dem CreateWindow auf, ist das so schwer zu kapieren oder was?
-
das kann garnicht sein! das ist unmöglich. der ruft doch nicht einfach so fgetc auf (wo er fehlschlägt, weil die datei nicht offen ist)
-
Doch ich hab irgentwo 2,3 Dialoge weiter ein fopen, wenn ich das wegmache geht es. Aber was soll das? Das ist doch erst viel später...
danke!
ciaoUnd wieso zeigt er die 2te Msgbox nicht an...
[ Dieser Beitrag wurde am 25.04.2003 um 13:31 Uhr von paranoiac.org editiert. ]
-
nach einer asseration wird das programm sofort beendet.
-
du solltest vielleicht mal für den dritten parameter (style) etwas sinnvolles eintragen ...
ich vermute mal, du willst das haupfenster unsichtbar haben und als dummy für den socket laufen lassen, oder ?
rocknix ///
ps: was macht eigentlich das CreateDialog() genau ? WM_CREATE wird meist schon ausgeführt, bevor CreateWindow() zurückkommt, sprich ist so eine asynchrone geschichte ...
[ Dieser Beitrag wurde am 25.04.2003 um 13:46 Uhr von RockNix editiert. ]
-
Ja aber das mit fopen wär meinetwegen erst 5 Minuten später gekommen, dass kann doch mein Programm normal net am Anfang schon stören...
danke an alle
ciao para
-
wahrscheinlich hast du einen denkfehler und das fopen wird eher aufgerufen als du denkst
mach mal ne message box genau eine zeile davor...
-
Wird nicht aufgerufen, weil bevor das mit fopen kommt, wird schon ne andere MessageBox und ein Dialog angezeigt. Diese Sachen werden hier aber nicht angezeigt....
ciao
-
Original erstellt von RockNix:
**du solltest vielleicht mal für den dritten parameter (style) etwas sinnvolles eintragen ...ich vermute mal, du willst das haupfenster unsichtbar haben und als dummy für den socket laufen lassen, oder ?
rocknix ///
ps: was macht eigentlich das CreateDialog() genau ? WM_CREATE wird meist schon ausgeführt, bevor CreateWindow() zurückkommt, sprich ist so eine asynchrone geschichte ...
[ Dieser Beitrag wurde am 25.04.2003 um 13:46 Uhr von [qb]RockNix** editiert. ][/QB]
Stimmt, dann liegts daran, dass ich die Message schon lang bekommen, hab, danke!
Aber wieso brauch ich einen vernünftigen Style?
-
naja, du brauchst zumindest mal einen style, damit es ein normales fenster wird, das nachrichten empfangen kann.
WS_POPUP sollte das minimum sein ...
mit
ShowWindow( hwnd, SW_HIDE)
schiebst du es dann in den nicht sichtbaren bereich.
rocknix ///
-
quatsch
-
welche güte ... me/ wird auch mal gefaked
DANKE
-
bitte, gerne wieder