Serialize() Funktion - Wie Fehlermeldung zurückgeben ?
-
Hallo zusammen
Ich nutze die Serialize() Funktion zum Speichern und Laden von Daten.
void CMapEditorDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar.WriteString("DocVersion 0.1\r\n"); ar.WriteString(m_strPolygonMode); } else { CString m_DocVersion; ar.ReadString(m_DocVersion); m_DocVersion.TrimRight(); if(m_DocVersion=="DocVersion 0.1") { ar.ReadString(m_strPolygonMode); } else { MessageBox(NULL,"Kann File nicht laden!, Versionsfehler","Hinweis",0); } } }
Bei Laden oder Speichern können ja Fehler vorkommen, z.B. falsches File geladen etc.
Wie kann ich dann einen Fehler zurückgeben ? Der Rückgabewert von Serialize() ist ja void. Ein return FALSE ist offensichtlich nicht erlaubt.Obenstehender Code bringt eine MessageBox mit Fehler auf den Bildschirm, aber das ist natürlich nicht das, was ich will.
Gruss, Peter
-
Du kannst ja was werfen -> try ... catch
Oder eine Membervariable im Doc setzen und später auswerten.
-
estartu_de schrieb:
Du kannst ja was werfen -> try ... catch
Oder eine Membervariable im Doc setzen und später auswerten.Sorry, ich habe mich nicht genau ausgedrückt.
Das Problem ist nicht innerhalb der Serialize Funktion einen Fehler zu erkennen.
Beim Laden habe ich das Problem, dass bei einem Fehler ja trotzdem ein Fenster geöffnet wird.
Ich könnte den Fehler in einer Variablen speichern, aber wo unterbinde ich das Öffnen des Fensters ?
-
Also ich habe folgende Lösung gefunden:
- Methode OnOpenDocument() erstellen.
- Dort FALSE zurückgeben, wenn man nicht möchte, dass das Fenster geöffnet wird.else { MessageBox(NULL,"Kann File nicht laden!, Versionsfehler","Hinweis",0); m_FileOKtoOpen = false; }
BOOL CMapEditorDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; // TODO: Add your specialized creation code here return m_FileOKtoOpen; // Wenn das File beim Öffnen Fehler auswies, wird es nicht geöffnet }