programm stürzt einfach ab :(
-
nein, das ist unteranderem mein Prob.
aber jetzt hab ich Get Last Error aufgerufen und die Parameter von FTPGetFile geändert, danach wird kein Wert mehr für GetLastError zurückgegeben aber das prog stürzt immer noch ab
-> faszit, scheinbarer Fehler behoben, problematik besteht jedoch immer noch

-
Wir sollen jetzt dein Programm für dich debuggen!?!?
Nimm einfach so lange instruktionen raus,bis es nicht mehr crasht.
Und grenze den Crash somit ein, bis du es hast
-
war doch ein guter Versuch euch das debuggen zu überlassen ^^
ne natürlich nicht: ich hab nur gedacht ich hätte irgendeinen "richtigen" Programmierfehler gemacht .... ( soweit man richtige Fehler machen kann
)aber scheint so als wär das die einzige Möglichkeit
ich werd mich morgen dann mal drangeben, klingkt nach ner Menge Arbeit und bis jetzt hat immer noch ein Forumsuser meine meist dummen Fehler gefundenmfG noha
-
Ich würd es ja gerne debuggen, aber ich hab keinen Bock den Rest des Code jetzt selbst zu schreiben. Wenn dann müsstest du das Komplette Programm mal raufladen
-
eine variable die nicht explizit initialisiert wurde, wird im debug-build automatisch mit 0xcccccccc initialisiert. wenn das in deinem code passiert, sollte der debugger der auch anzeigen, wo du darauf zugreifst. kannst du den debugger bedienen?
-
das Programm ähnelt ( soll später mal sein ) einer Tauschbörse mit Profilfunktion
es sind noch ungenutzte Variablen drin ( auch der Knopf Abort ist ungenutzt )
es handelt sich hierbei um mein erstes prog mit wininetman sieht auch die Stelle, an der ich mit FtpGetFile die parameter geändert hab. Die Datei wird erfolgreich gedownloaded ,wie gewünscht und dann nachdem die Listboxen angezeigt werden und die letzte MessageBox weggeklickt wurde - stürzt es ab
der freenet ftp server dient nur als testobjekt
// NHWN.cpp : Definiert den Einstiegspunkt für die Anwendung. // #include "stdafx.h" #include "Header.h" static struct { int state; // 1 = Loginscreen, 2= online, LPARAM measure; // Maße des Fensters TCHAR ProgDirectory[512]; // hier befindet sich das Programm // Logindaten für FTP Server TCHAR user[25] ; // Benutzername TCHAR pwd[25] ; // Password TCHAR url[64] ; // FTP-Server HINTERNET hIntSession, hFtpSession, hFind, hFile ; // Handles für den Internetzugriff WIN32_FIND_DATA data ; // gefundene Datei // LoginDaten für Account TCHAR User[25]; TCHAR Pwd[25]; TCHAR Class[3]; }ControlInterface; #define CI ControlInterface int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR szCmdLine, int iCmdShow) { WNDCLASSEX wc; wc.cbSize = sizeof (WNDCLASSEX); wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.lpszClassName = _T("NHWN"); wc.lpfnWndProc = WndProc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = wc.hIcon; wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.lpszMenuName = NULL; wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); if (RegisterClassEx(&wc) == 0) { MessageBox (NULL, _T("Fehler beim registrieren der Fensterklasse!"), _T("Norsensoft HomeWork Network Client"), MB_OK | MB_ICONERROR); return 0; } HWND hWnd = CreateWindowEx(0, _T("NHWN"), _T("Norsensoft HomeWork Network Client"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 900, 200, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { MessageBox(NULL, _T("Fenster konnte nicht erstellt werden!"), _T("Norsensoft FTP Client"), MB_OK | MB_ICONERROR); return 0; } lstrcat(CI.user , _T("noha_391")); // Benutzername lstrcat(CI.pwd , _T("PASSWORT")); // Password lstrcat(CI.url , _T("people-ftp.freenet.de"));// FTP-Server ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { IsDialogMessage(hWnd,&msg); //TranslateMessage(&msg); //DispatchMessage(&msg); } return static_cast<int>(msg.wParam); } //---------------------------------------------------------------------------------------------- void ERROr( HWND hWnd ) { TCHAR bufferc[156]; DWORD error = GetLastError(); wsprintf( bufferc,_T("%d"),error); MessageBox(hWnd,bufferc,0,0); } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR buffera[64]; TCHAR bufferb[512]; TCHAR bufferc[8]; switch (message) { case WM_CREATE: { HINSTANCE hInstance = ((LPCREATESTRUCT)lParam)->hInstance; // HINSTANCE festlegen ControlInterface.state = 1; // Loginscreen CreateWindowExW(0, _T("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL | WS_TABSTOP, 50, 50, 100, 20, hWnd, (HMENU)ID_LOGIN_USER , hInstance, NULL); //Username SetWindowText(GetDlgItem(hWnd,ID_LOGIN_USER),_T("username")); // Text einsetzen CreateWindowExW(0, _T("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL | WS_TABSTOP , 50, 80, 100, 20, hWnd, (HMENU)ID_LOGIN_PWD , hInstance, NULL); //PWD SetWindowText(GetDlgItem(hWnd,ID_LOGIN_PWD),_T("password")); // Text einsetzen CreateWindowExW(0, _T("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL | WS_TABSTOP, 50, 110, 100, 20, hWnd, (HMENU)ID_LOGIN_CLASS , hInstance, NULL); //Class SetWindowText(GetDlgItem(hWnd,ID_LOGIN_CLASS),_T("class")); // Text einsetzen CreateWindowExW(0, _T("button"), _T("Login"), WS_CHILD | WS_VISIBLE | ES_LEFT | WS_TABSTOP, 200, 110, 150, 20, hWnd, (HMENU)ID_LOGIN_LOGIN, hInstance, NULL); //Button- Login erstellen CreateWindowExW(0, _T("button"), _T("Abort"), WS_CHILD | WS_VISIBLE | ES_LEFT | WS_TABSTOP, 200, 110, 150, 20, hWnd, (HMENU)ID_LOGIN_ABORT, hInstance, NULL); //Button-Abbrechen erstellen CreateWindowEx(0, _T("listbox"), NULL, WS_CHILD | ES_LEFT | LBS_NOTIFY | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU)ID_LISTBOX_WORK, hInstance, NULL); //ListBoxA erstellen CreateWindowEx(0, _T("listbox"), NULL, WS_CHILD | ES_LEFT | LBS_NOTIFY | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU)ID_LISTBOX_UPLOAD, hInstance, NULL); CreateWindowEx(0, _T("listbox"), NULL, WS_CHILD | ES_LEFT | LBS_NOTIFY | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU)ID_LISTBOX_TODOFOR, hInstance, NULL); CreateWindowEx(0, _T("listbox"), NULL, WS_CHILD | ES_LEFT | LBS_NOTIFY | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU)ID_LISTBOX_PUBLISHER, hInstance, NULL); CreateWindowEx(0, _T("listbox"), NULL, WS_CHILD | ES_LEFT | LBS_NOTIFY | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU)ID_LISTBOX_LOG, hInstance, NULL); } break; case WM_SIZE: { ControlInterface.measure = lParam; switch(ControlInterface.state) { case 1: ShowWindow(GetDlgItem(hWnd,ID_LOGIN_USER),true); ShowWindow(GetDlgItem(hWnd,ID_LOGIN_PWD),true); ShowWindow(GetDlgItem(hWnd,ID_LOGIN_CLASS),true); ShowWindow(GetDlgItem(hWnd,ID_LOGIN_LOGIN),true); ShowWindow(GetDlgItem(hWnd,ID_LOGIN_ABORT),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_WORK),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_UPLOAD),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_TODOFOR),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_PUBLISHER),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_LOG),false); break; case 2: ShowWindow(GetDlgItem(hWnd,ID_LOGIN_ABORT),false); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_WORK),true); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_UPLOAD),true); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_TODOFOR),true); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_PUBLISHER),true); ShowWindow(GetDlgItem(hWnd,ID_LISTBOX_LOG),true); int a= (LOWORD(ControlInterface.measure)-20)/5; int b= HIWORD(ControlInterface.measure)-20; MoveWindow(GetDlgItem(hWnd,ID_LISTBOX_WORK),10,10,a,b,1); MoveWindow(GetDlgItem(hWnd,ID_LISTBOX_UPLOAD),10+a,10,a,b,1); MoveWindow(GetDlgItem(hWnd,ID_LISTBOX_TODOFOR),10+a+a,10,a,b,1); MoveWindow(GetDlgItem(hWnd,ID_LISTBOX_PUBLISHER),10+a+a+a,10,a,b,1); MoveWindow(GetDlgItem(hWnd,ID_LISTBOX_LOG),10+a+a+a+a,10,a,b,1); break; } } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); } break; case WM_COMMAND: { if( LOWORD(wParam) == ID_LOGIN_USER || ID_LOGIN_PWD || ID_LOGIN_CLASS ) { switch( HIWORD(wParam)) { case EN_SETFOCUS: SetWindowText((HWND)lParam,NULL); break; } } if( LOWORD(wParam) == ID_LOGIN_LOGIN && HIWORD(wParam) == BN_CLICKED ) { ControlInterface.hIntSession = InternetOpenW (_T("Microsoft Internet Explorer"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) ; // INet Session beginnen if (ControlInterface.hIntSession == NULL) // Fehler ? { MessageBox(hWnd,_T("hIntSession == NULL"),0,0); } ControlInterface.hFtpSession = InternetConnectW (CI.hIntSession, ControlInterface.url, INTERNET_DEFAULT_FTP_PORT, ControlInterface.user,ControlInterface.pwd, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0) ; // FTP-Session beginnen if (ControlInterface.hFtpSession == NULL ) // Fehler ? { MessageBox(hWnd,_T("hFtpSession == NULL"),0,0); InternetCloseHandle (ControlInterface.hIntSession) ; }else { MessageBox(hWnd,_T("OK"),0,0); CI.state = 2; } GetWindowText(GetDlgItem(hWnd,ID_LOGIN_USER),CI.User,26) ; GetWindowText(GetDlgItem(hWnd,ID_LOGIN_CLASS),CI.Class,3); ERROr(hWnd); FtpSetCurrentDirectory(CI.hFtpSession, CI.Class); FtpSetCurrentDirectory(CI.hFtpSession, CI.User); ERROr(hWnd); lstrcat(buffera,CI.User); ERROr(hWnd); wsprintf(CI.ProgDirectory,_T("C:\\NHWN\\")); lstrcat(bufferb,CI.ProgDirectory); ERROr(hWnd); //FtpGetFileW(CI.hFtpSession, lstrcat(buffera,_T(".pro")), lstrcat(bufferb, buffera),false,FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ,FTP_TRANSFER_TYPE_BINARY,NULL); FtpGetFileW(CI.hFtpSession, _T("norman.pro"), _T("C:\\NHWN\\norman.pro"),false,FILE_SHARE_DELETE | FILE_SHARE_WRITE | FILE_SHARE_READ,FTP_TRANSFER_TYPE_BINARY,NULL); ERROr(hWnd); SendMessage(hWnd,WM_SIZE,CI.measure,CI.measure); ERROr(hWnd); } } break; case WM_DESTROY: { PostQuitMessage(0); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
-
achja:
debugger richtig bedienen -> negativ
er zeigte mir bis jetzt immer wo der fehler lag ( linie markieren ),aber diesmal nicht

benutze visual c++ express
-
du schreibst bestimmt mit diesem ganzen sprintf und strcat gefrickel über eine buffergrenze weg. wenn du es mit dem debugger ned hinbekommst, dann debug doch selbst wie Listing schon meinte. kommentier halt alles aus und geh dann zeile für zeile durch, bis du weißt an welcher zeile es liegt.
-
ich bin jetzt wie beschrieben verfahren, und habe den Fehler lokalisiert:
lstrcat(bufferb,CI.ProgDirectory); ist der Übeltäter
leider weis ich nicht warum
bufferb ist auf keinen fall zu klein, da ich ihn auf 1024 ausgeweitet habe. Ich habe die Anweisung auch schon durch:wsprintf(bufferb,_T("%s"),CI.ProgDirectory);
ersetzt aber erfolgslos
kann mir jemand den Fehler erklären ?
-
das wsprintf(bufferb,_T(\\"%s\\"),CI.ProgDirectory); funktioniert doch, ( hatte noch nen haltepunkt davor gesetzt, jedoch bekomm ich in der vorletzten message box error 5, aber das programm läuft, werd mich jetzt noch damit auseinandersetzen.
Vielen dank an alle die mir geholfen haben