Probleme mit Serialisierung



  • Hallo wiedermal!

    Ich hab jetzt ziemlich lang rumprobiert, habs aber bis dato noch nicht hinbekommen:

    Ich habe Probleme mit der Serialisierung von Daten. Sobald ich eine Datei öffnen möchte, bekomme ich eine Debug Assertion.

    Der Fehler taucht in der 4. Zeile der DefWindowProc auf:

    LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
    {
      if (m_pfnSuper != NULL)
       return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam); //Fehler!
    
      WNDPROC pfnWndProc;
       if ((pfnWndProc = *GetSuperWndProcAddr()) == NULL)
         return ::DefWindowProc(m_hWnd, nMsg, wParam, lParam);
       else 
         return ::CallWindowProc(pfnWndProc, m_hWnd, nMsg, wParam, lParam);
    }
    

    Das Problem taucht auf, sobald ich eine Datei öffne, also denke ich mir, dass es was mit der OnOpenDocument() zutun hat. Die hab ich folgendermaßen implementiert:

    BOOL CCNCProgrammDoc::OnOpenDocument(LPCTSTR lpszPathName)
    {
        if (!CDocument::OnOpenDocument(lpszPathName))
    	return FALSE;
    
       // TODO:  Fügen Sie Ihren spezialisierten Erstellcode hier ein.
    
    	return TRUE;
    }
    

    Sollte jemand von euch schon mal ein ähnliches Problem gehabt haben und mittlerweile auch wissen, wie man es behebt, wäre ich sehr froh, wenn derjenige seine Erkenntnisse eventuell mit mir teilen könnte 😉

    Danke wiedermal

    lg Mike


  • Administrator

    Bei der Funktion DefWindowProc werden einfach nur Daten weitergegeben. Bin mir ziemlich sicher, dass dort nicht der Fehler auftritt. Der Fehler tritt womöglich in der Funktion CallWindowProc auf oder sonst irgendwo in einem späteren Funktionsaufruf.
    OnOpenDocument hast du denke ich mal einfach normal überschrieben. Kann man somit auch keinen Fehler erkennen. Mir erscheint sie jedenfalls normal.

    Ohne Debug oder sonstigen weiteren Informationen kann ich dir daher schlecht helfen.
    Da wo ich am ehesten den Fehler jetzt sehen würde, ist bei der Art, wie du die Datei öffnest. Machst du es über den Standardmenüpunkt oder hast du da was selber gebastelt?

    Grüssli



  • Danke für die Antwort, Dravere 😉

    Ich war heut noch bis in den tiefen Morgen aktiv und konnte das Problem nach einiger Zeit lösen.

    Du hast recht Dravere, dass der Fehler nicht in der DefWindowProc auftritt.

    Der Fehler tritt in der OnInitialUpdate() auf, die ich überschrieben habe, dort erzeuge ich nämlich ein Objekt von einer Klasse, welche von CWnd abgeleitet ist.
    Was ich übersehen habe ist, dass die OnInitialUpdate aufgerufen wird, sobald man eine Datei öffnet, speichert usw.
    Da ich dort die Methode Create() aufrufe, und diese abermals aufgerufen wird, sobald man eine Datei öffnet, speichert,.., tritt ein Fehler auf.

    Ich hoffe das hilft denjenigen, die das nächste Mal ein ähnliches Problem haben sollten wie ich 🙂

    lg Mike


Anmelden zum Antworten