fenster layer?
-
is der code denn grundsätzlich ok?
wenn ich den debugger starte kriege ich:Geladene Symbole für "D:\Programme\C++ files\MSDev98\MyProjects\test\Debug\test.exe" "C:\WINDOWS\system32\ntdll.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\kernel32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\user32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\gdi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\advapi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\comdlg32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\shlwapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\msvcrt.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\comctl32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\shell32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\uxtheme.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\Programme\Logitech\MouseWare\system\LgWndHk.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\msctf.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\Programme\Gemeinsame Dateien\Logitech\Scrolling\LGMSGHK.DLL" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\msvcp60.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\mslbui.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\oleaut32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\ole32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\apphelp.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\clbcatq.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\comres.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\version.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\setupapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\ntshrui.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\atl.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\netapi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\userenv.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. "C:\WINDOWS\system32\shdocvw.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden. Thread 0x330 wurde mit Code 0 (0x0) beendet. Thread 0xA98 wurde mit Code -1073741819 (0xC0000005) beendet. Thread 0xAB4 wurde mit Code -1073741819 (0xC0000005) beendet. Thread 0xAA4 wurde mit Code -1073741819 (0xC0000005) beendet. Thread 0xAA8 wurde mit Code -1073741819 (0xC0000005) beendet. Thread 0xA74 wurde mit Code -1073741819 (0xC0000005) beendet. Das Programm "D:\Programme\C++ files\MSDev98\MyProjects\test\Debug\test.exe" wurde mit Code -1073741819 (0xC0000005) beendet.edit: ich hoffe das ist was du willst, ich kenn mich nicht mitm debugger aus. bin anfänger

-
pixartist schrieb:
is der code denn grundsätzlich ok?
Wenn Du mit dem ständigen Abstürzen leben kannst, ja.

pixartist schrieb:
wenn ich den debugger starte kriege ich:
Möchtest Du, bevor wir hier weitermachen, nicht erstmal die Bedienung und den Umgang mit einem Debugger lernen?
Such mal hier im Forum nach dem Wort "Debugger", ich glaube hier hatte mal jemand ein kleines Grundlagentutorial gepostet (BreakPoints usw.)
-
Fällt das niemandem auf?
char *len = new char[5]; len[5] = 0; // Du schreibst hier über die Grenzen des Arrays! itoa(nRead,len,36); MessageBox(NULL, len, "",0)
-
ja gern, erklähr doch mal
äh muss ich jetzt was kompliziertes machen oder ist das was du möchtest n einfacher handgriff? wenn es was einfaches ist würde ich mich freuen wenn du mir kurz sagst was ich machen muss, dann werde ich mich später mit dem debugger beschäftigen
wenns komplizierter ist, kannste mir n tut oder so empfehlen?edit: hab jetzt n debug gestartet..und beim fehler zeigt er mir folgende zeile an:
77E5ABD2 mov dword ptr [ecx],eaxedit: aziz, den messagebox kram hab ich schon lange rausgenommen...
-
Aziz schrieb:
Fällt das niemandem auf?
char *len = new char[5]; len[5] = 0; // Du schreibst hier über die Grenzen des Arrays! itoa(nRead,len,36); MessageBox(NULL, len, "",0)Doch, schon, das zeigt nur, das es bei ihm mit einem Debugger-Tutorial alleine nicht getan ist...
-
Den selber Fehler hast du aber nochmal gemacht:
char *lpbuffer = new char[nRead]; lpbuffer[nRead] = 0;So wäre es besser:
char *lpbuffer = new char[nRead+1]; lpbuffer[nRead] = 0;Falls dies nicht der die Zugriffsverletzung verursachende Fehler war, dan sag bitte genau, in welcher Zeiler der Fehler auftritt. Breakpoints kannst du mit F9 setzen, mit F5 dann bis zum Breakpoint ausführen und dann mit F10 zeilenweise ausführen

-
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <fstream.h> #include <string> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //Deklaration der Windows-Nachrichten-Prozedur int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { char szName[] = "Fensterklasse"; WNDCLASS wc; HICON hIcon = (HICON) LoadImage(hI,"PixIcon.ico", IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); //HICON myicon = "PixEdit.ico"; wc.style = CS_HREDRAW | CS_VREDRAW; // CS = "class style" wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hI; wc.hIcon = hIcon;/*LoadIcon (NULL, "PixEdit.ico")*/ wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szName; RegisterClass (&wc); HWND hwnd = CreateWindow (szName, "PixEdit v 0.1", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hI, NULL ); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); ///////////////////////////// /* SPIELKRAM */ ///////////////////////////// /*HWND fileSearch = CreateWindowEx ( WS_EX_TOOLWINDOW, szName, "Oeffnen", WS_CHILD | WS_OVERLAPPEDWINDOW | WS_POPUPWINDOW , 320, 5, 400, 150, hwnd, (HMENU)3, NULL, NULL ); ShowWindow (fileSearch, SW_SHOWNORMAL); UpdateWindow (fileSearch); //SetWindowPos(fileSearch, HWND_TOPMOST, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, SWP_SHOWWINDOW); HWND hWnd = FindWindow(NULL,"Unbenannt - Editor"); if(hWnd) { SetWindowText(hWnd,"Test.txt - Editor <-LOL son kack proggie ^^"); } */ // Nachrichten-Schleife MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } char *LoadFileToObj(char* file, HWND toshow) { FILE *topen; if((topen = fopen(file, "rb")) != NULL) { int fileSize; fseek(topen, 0, SEEK_END); fileSize = ftell(topen); char *buffer; buffer = new char[fileSize+1]; buffer[fileSize] = 0; fseek(topen, 0, SEEK_SET); fread(buffer, 1, fileSize, topen); fclose(topen); SetWindowText(toshow, file); return buffer; } MessageBox(NULL, "Datei nicht gefunden!", "Fehler", 0); return NULL; } void SaveToFile(char *pFilename, char *pBuffer, int nSize) { FILE *file; if(!(file= fopen(pFilename, "w"))) fseek(file, 0, SEEK_SET); fprintf(file, "%s", pBuffer); fclose(file); } inline int GetEditTextLength(HWND hWnd) { return SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0)+1; } HWND textField; HWND loadEdit; HWND fileZeiger; // Windows-Nachrichten-Prozedur LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND loadButton; HWND saveButton; HWND browseButton; char *toSave; char *Content; char *toLoad; switch (message) { case WM_CREATE: if(GetDlgCtrlID(hwnd) == 0) { textField = CreateWindowEx( WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL, 50, 0, 600, 400, hwnd, NULL, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL ); loadEdit = CreateWindowEx( WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 5, 120, 20, hwnd, NULL, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL ); fileZeiger = CreateWindow/*Ex*/( /*WS_EX_STATICEDGE,*/ "Edit", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 30, 300, 20, hwnd, NULL, (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE), NULL ); browseButton = CreateWindow ( "button", "Browse", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 140, 5, 80, 20, hwnd, (HMENU)4, ((LPCREATESTRUCT) lParam)->hInstance, NULL ); loadButton = CreateWindow ( "button", "Load", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 230, 5, 80, 20, hwnd, (HMENU)1, ((LPCREATESTRUCT) lParam)->hInstance, NULL ); saveButton = CreateWindow ( "button", "Save", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 320, 5, 80, 20, hwnd, (HMENU)2, ((LPCREATESTRUCT) lParam)->hInstance, NULL ); SendMessage(fileZeiger, EM_SETREADONLY, TRUE, NULL); } return 0 ; case WM_COMMAND: if(LOWORD(wParam)==1) { toLoad = new char[GetEditTextLength(loadEdit)]; if(GetEditTextLength(loadEdit) != 1) { GetWindowText(loadEdit, toLoad, GetEditTextLength(loadEdit)); SetWindowText(textField, LoadFileToObj(toLoad, fileZeiger)); SetWindowText(loadEdit, ""); } else { if(GetEditTextLength(fileZeiger) != 1) { GetWindowText(fileZeiger, toLoad, GetEditTextLength(fileZeiger)); SetWindowText(textField, LoadFileToObj(toLoad, fileZeiger)); } else { MessageBox(NULL, "Keine Datei angegeben!", "Fehler", 0); } } } if(LOWORD(wParam)==2) { toSave = new char[GetEditTextLength(loadEdit)]; Content = new char[GetEditTextLength(textField)]; if(GetEditTextLength(loadEdit) != 1) { GetWindowText(loadEdit, toSave, GetEditTextLength(loadEdit)); GetWindowText(textField, Content, GetEditTextLength(textField)); SaveToFile(toSave,Content, sizeof(Content)); } else { if(GetEditTextLength(fileZeiger) != 1) { GetWindowText(fileZeiger, toSave, GetEditTextLength(fileZeiger)); GetWindowText(textField, Content, GetEditTextLength(textField)); SaveToFile(toSave,Content, sizeof(Content)); } else { MessageBox(NULL, "Keine Datei angegeben!", "Fehler", 0); } } } if(LOWORD(wParam)==4) { OPENFILENAME ofn; // common dialog box structure char szFile[260]; // buffer for file name HANDLE hf; // Los Gehts (MSDN krams) //Memory leeren: ZeroMemory(&ofn, sizeof(ofn)); //Grösse, Owner, File... ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFile = szFile; // // Set lpstrFile[0] to '\0' so that GetOpenFileName does not // use the contents of szFile to initialize itself. // //Anm,: ??? ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn)==TRUE) hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); //oO wat is wacken? unsigned long nRead = GetFileSize(hf,NULL); char *lpbuffer = new char[nRead+1]; lpbuffer[nRead] = NULL; SetFilePointer(hf,0,NULL,FILE_BEGIN); ReadFile( hf, lpbuffer, nRead, NULL, NULL ); //<---------------####Bis hier läufts. Wenn ich an dieser stelle F10 drücke, dann gibts den memory fehler! also scheinbar beim zugriff auf lpbuffer ?! SetWindowText(textField, lpbuffer); SetWindowText(fileZeiger, szFile); } return 0; case WM_SIZE: if(GetDlgCtrlID(hwnd) == 0) { MoveWindow(textField, 5, 55, LOWORD(lParam)-10, HIWORD(lParam)-65, TRUE); } return 0; case WM_DESTROY: if(GetDlgCtrlID(hwnd) == 0) { PostQuitMessage (0); } if(GetDlgCtrlID(hwnd) == 3) { SendMessage(hwnd, WS_VISIBLE, FALSE, NULL); } return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }
-
rat für die zukunkt: das nächste mal nur den, deiner meinung nach, relevanten code posten.
char *lpbuffer = new char[nRead+1]; // warum +1 ? lpbuffer[nRead] = NULL; // warum diese zeile ? SetFilePointer(hf,0,NULL,FILE_BEGIN); // warum ? ReadFile( hf, lpbuffer, nRead, NULL, NULL);http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/readfile.asp
msdn schriebIf lpOverlapped is NULL, lpNumberOfBytesRead cannot be NULL. If lpOverlapped is not NULL, lpNumberOfBytesRead can be NULL. If this is an overlapped read operation, you can get the number of bytes read by calling GetOverlappedResult. If hFile is associated with an I/O completion port, you can get the number of bytes read by calling GetQueuedCompletionStatus.
-
oh sorry das hab ich nicht gesehen
danke für die hilfe...btw.: wenn ich
lpbuffer[nRead]=0;
nicht mache, hab ich nachher 4 komische zeichen am ende des geladenen textes!
-
in der regel terminiert man das string wenn man fertig ist mitlesen und nicht vorher.
if(!(ReadFile(hf,lpbuffer, nRead, &dwBytesRead, NULL))) { // fehler abfangen } // fehler abfangen if(dwBytesRead == 0 || dwBytesRead != nRead) { // speicher freigeben und solche scherze return false; } // buffer terminieren lpbuffer[dwBytesRead] = '\0';