Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Serialize und CList

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.09.2004, 16:03 Uhr
~michael l.
Gast


Also ich wollt mal fragen was man alles beachten muß bei ner Liste?

Ich habe ein Klasse wo ich sicher bin, das sie serialisiert wird (und das es funktioniert)
Nun habe ich eine CList mit Zeigern auf diese Elemente, da cih die auf dem Heap angelget habe. Serialisiere ich die nun, so kommt entweder nur ... raus, oder "unbekanntes Dateiformat".

1.Was muß man beachten?
2.Reicht es nicht wenn die klasse serialisierbar ist? (Muß ich noch was machen?)
3.Kann die Liste nur Objekte und nicht Zeiger auf Objekte serialiseren?

Ich habe auch versucht die Liste zu umgehen und alles selber zu schreiben, aber
da habe ich die selben Probleme!

1. abspeichern der Anzahl der Elemente in der Lsite (geht auch)
2. über alle Elemente: serialisieren

Auslesen
1.Alle Elemente aus Liste löschen
2.Anzahl auslesen.
3.Objekte anlegen und Daten auslesen.

Wenn gewünscht kann ich auch Code zeigen, ist nur recht viel

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.09.2004, 09:43 Uhr
Airdamn



Wie sieht denn Deine Serialize-Methode aus ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2004, 15:25 Uhr
~KINK_LEO_III
Gast


Tu mal den Source ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.10.2004, 00:45 Uhr
~michael l.
Gast



C++:
// strukturen.h
// Modifikatoren
typedef class Modifier : public CObject
{
    DECLARE_SERIAL (Modifier)
public:
    CString m_bezeichnung;
    int        m_mod_wert;
    CString m_mod_bechreibung;
public:
    void Serialize(CArchive &ar);
}mod_t;

//------------------------------------------------------------------------------------

// Attribut
typedef class Attribut : public CObject
{
    DECLARE_SERIAL (Attribut)
public:
    int    m_attributs_wert;
    int    m_attributs_mod;
    int    m_attributs_tmp_wert;
    int    m_attributs_tmp_mod;
    CList<mod_t*,mod_t*>* m_mods;
public:
    void Serialize(CArchive &ar);
}attribut_t;




C++:
// strukturen.cpp
include "stdafx.h"
#include "DDStrukturen.h"

//------------------------------------------------------------------------------------

IMPLEMENT_SERIAL (Modifier, CObject, 1)
IMPLEMENT_SERIAL (Attribut, CObject, 1)

//------------------------------------------------------------------------------------

void Modifier::Serialize(CArchive &ar)
{
    CObject::Serialize(ar);

    if(ar.IsStoring())
    {
        ar << m_bezeichnung
            << m_mod_wert
            << m_mod_bechreibung;
    }
    else
    {
        ar >> m_bezeichnung
            >> m_mod_wert
            >> m_mod_bechreibung;
    }
}

//------------------------------------------------------------------------------------

void Attribut::Serialize(CArchive &ar)
{
    CObject::Serialize(ar);

    if(ar.IsStoring())
    {
            ar << m_attributs_mod
                << m_attributs_tmp_mod
                << m_attributs_tmp_wert
                << m_attributs_wert;

            // Liste der Modifikationen speichern, da der eingebaute
            // MFC Mechanismus nicht geht -> selber schreiben
            ar << m_mods->GetCount();
            
            POSITION pos = m_mods->GetHeadPosition();
            for(int i=0;i<m_mods->GetCount();i++)
            {
                m_mods->Serialize(ar);
            }
    }
    else
    {
            ar >> m_attributs_mod
                >> m_attributs_tmp_mod
                >> m_attributs_tmp_wert
                >> m_attributs_wert;

            // Liste laden,
            int count=0;
            // Anzahl
            ar >> count;
            mod_t* mod = NULL;
            // Serialisieren: 1.Liste leeren, 2. neue Elemente einfügen
            POSITION pos = m_mods->GetHeadPosition();
            for(int i=0;i<m_mods->GetCount();i++)
            {
                m_mods->RemoveAt(pos);
            }
            
            pos = m_mods->GetHeadPosition();
            for(i=0;i<count;i++)
            {
                mod = new mod_t();
                mod->Serialize(ar);
                pos = m_mods->InsertAfter(pos,mod);
                mod = NULL;
            }
    }
}



das ist jetzt die variante wo ich versuche alles selbst zu machen.
vorher hatte ich einfach

C++:
m_mods->Serialize(ar);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: