fenster layer?



  • pixartist schrieb:

    also erstmal: 0x77e5abd2 verweist auf Speicher 0x00000000 der vorgang written konnte nicht auf den speicher ausgeführt werden.

    Also mit der Angabe kann hier keiner was anfangen... welcher Zeiger zeigt denn auf NULL (frag Deinen Debugger mal, der weiß sowas).



  • 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],eax
    

    edit: 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 schrieb

    If 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';
    

Anmelden zum Antworten