"ungültiger zugriff auf speicherbereich"



  • BOOL ShowExtendedStyles(HWND hwndDialog, HWND hwndFoundWindow)
    {
      HINSTANCE hInstance = NULL;
      LPWNDCLASSEX wndClassEx = NULL;
      char szClassName[255]; // Puffer des Klassennamen, nullterminiert
      char szOutput[255]; // Ausgabe
    
      // Retrieves a handle to the application instance.
      hInstance = (HINSTANCE)GetWindowLong(hwndFoundWindow, GWL_HINSTANCE);
    
      // Retrieves the name of the class to which the specified window belongs.
      int ClassNameNumChars = GetClassName(hwndFoundWindow, szClassName, sizeof(szClassName)-1);
    
      // Klassen-Informationen anfordern:
      if(GetClassInfoEx(hInstance, szClassName, wndClassEx) == 0)
      {
    	ErrorExit();
    	// GCL_STYLE: Retrieves the window-class style bits.
    	//SetDlgItemText (hwndDialog, IDC_EDIT2, "Class not found!");
      }
      else
      {
        //SetDlgItemText (hwndDialog, IDC_STATIC, "sdsd");
    
      SetDlgItemText (hwndDialog, IDC_EDIT2, szOutput);
      }
    
      // Output
    
      /*
      wsprintf(szOutput,
    	       "long: %d\r\n",
    		   wndClassEx->cbSize);
      */
    
      //SetDlgItemText (hwndDialog, IDC_EDIT2, szOutput);
    
      // return value if SUCCESS
      return true;
    }
    

    in der zeile:

    if(GetClassInfoEx(hInstance, szClassName, wndClassEx) == 0)
    

    tritt ein fehler auf. diese wird über ErrorExit(); in einer MessageBox angezeigt.

    Dieser lautet: "ungültiger zugriff auf speicherbereich"

    Woran liegt's denn?



  • shareholder schrieb:

    Woran liegt's denn?

    Am Nicht-MSDN-Library-Lesen.

    Der dritte Parameter von GetClassInfoEx muss ein Zeiger auf eine Instanz der Struktur WNDCLASSEX sein, nicht einfach nur ein Nullzeiger.



  • Wie funktioniert das? Sorry, bin Anfänger. 😞



  • Ach verflucht! ich vestehe es einfach nicht. 😡



  • shareholder schrieb:

    Wie funktioniert das? Sorry, bin Anfänger. 😞

    Was suchst du dann bitte im WinAPI Forum?



  • schreib anstatt

    LPWNDCLASSEX wndClassEx = NULL;
    

    mal

    LPWNDCLASSEX wndClassEx = new WNDCLASSEX;
    

    und am Ende des Progs/funktion

    delete wndClassEx
    


  • WNDCLASSEX wndClassEx;
    // [...]
    GetClassInfoEx(hInstance, szClassName, &wndClassEx);
    


  • erstmal danke, ...

    jetzt bekomme ich nur noch die meldung Error 1411: Klasse ist nicht vorhanden Woran könnte das liegen? Handle, HINSTANCE und Klassenname habe ich erfolgreich bekommen....

    An "gute Frage", logge dich bitte ein, wenn du etwas zu sagen hast! Wir behandeln WinApi gerade im Studium und ich muss bis Dienstag was gebastelt haben.



  • shareholder schrieb:

    jetzt bekomme ich nur noch die meldung Error 1411: Klasse ist nicht vorhanden Woran könnte das liegen? Handle, HINSTANCE und Klassenname habe ich erfolgreich bekommen....

    Bei wessen Code?



  • beiden ;-))



  • Komisch. Bei LPWNDCLASSEX hast du keinen Fehler bekommen? Hast du windows.h eingebunden?



  • doch doch! bei lpwndclassex kam ein fehler.

    ich dachte du meinst deine variante und die von Horst2. 🙂

    hast du eine idee? ich kann mir echt nix vorstellen. 😕

    edit: ja, klar windows.h ist eingebunden 🙂



  • hast du dich vielleicht verschrieben? kann es mir auch nicht erklären



  • den code, den ich bereits habe:

    BOOL ShowExtendedStyles(HWND hwndDialog, HWND hwndFoundWindow)
    {
      HINSTANCE hInstance = NULL;
      WNDCLASSEX wndClassEx;
      char szClassName[255]; // Puffer des Klassennamen, nullterminiert
      char szOutput[255]; // Ausgabe
    
      // Retrieves a handle to the application instance.
      hInstance = (HINSTANCE)GetWindowLong(hwndFoundWindow, GWL_HINSTANCE);
    
      // Retrieves the name of the class to which the specified window belongs.
      int ClassNameNumChars = GetClassName(hwndFoundWindow, szClassName, sizeof(szClassName)-1);
    
      // Klassen-Informationen anfordern:
      if(GetClassInfoEx(hInstance, szClassName, &wndClassEx) == 0)
      {
    	ErrorExit();
      }
      else
      {
        //do something
      }
    
      // return value if SUCCESS
      return true;
    }
    

    @horst2 : dein new WNDCLASSEX funkt genau wie WNDCLASSEX wndClassEx;!



  • shareholder schrieb:

    @horst2 : dein new WNDCLASSEX funkt genau wie WNDCLASSEX wndClassEx;!

    schon klar 😃

    kannst du noch mal die genaue Fehlermeldung posten



  • bei mir spuckt er keinen Fehler aus.

    Mit was arbeitest du?



  • void ErrorExit() 
    { 
        TCHAR szBuf[80]; 
        LPVOID lpMsgBuf;
        DWORD dw = GetLastError(); 
    
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
    
        wsprintf(szBuf, "Error %d: %s", dw, lpMsgBuf); 
    
        MessageBox(NULL, szBuf, "Debugging Error", MB_OK); 
    
        LocalFree(lpMsgBuf);
    }
    

    Error 1411: Klasse ist nicht vorhanden



  • Ich arbeite mit Microsoft Visual Studio.
    Wird aber damit nix zu tun haben. *g*



  • mmmh, hab ich auch. was hast du für ein projekt?
    unterstützt du mfc?

    bei geht's



  • Und bei welcher Zeile kommt der Fehler genau?


Anmelden zum Antworten