Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

A l'aide !!! Serializer un pointeur vers une collection et autres problèmes !!!!!!!!!!!!!!!!!

2 réponses
Avatar
William A.
Bonjour,

je m'arrache les cheveux sur le processus de serialization (c'est la
première fois que je tente de faire une serialization) en MFC
(document/vue).

Mon problème :

Je veux serialiser la structure de ma TreeView.
Mon document contient un pointeur "pRacine" vers un objet CDossier dérivé de
CObject.
la classe CDossier contient :
- des données membres de type CString, CTime, ....
- un pointeur "pEnfants" pointant vers une collection (CTypedPtr) d'objets
de type CDossier
- un pointeur "pParent" vers un objet de type CDossier

Je cré mon "pRacine" dans le constructeur de mon document.
j'initialise "pEnfant" et "pParent" à NULL car il s'agit de la racinede
l'arbre.

Mon interface permet de créer des dossiers enfants qui sont rajoutés à la
collection "pEnfant" correspondante.

Comment faire pour serializer mon pRacine ?

Ma fonction Serialize ressemble à celle ci-après :

CDossier::Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar << m_donnee1;
ar <<m_donnee2;
}
else
{
ar >> m_donnee1;
ar >>m_donnee2;
}

pEnfant->Serialize(ar);

}

MON PROBLEME :
j'arrive bien à sauvegarder mon document, le problème est à l'ouverture :
en effet à l'ouverture de mon programme comme je l'ai dit, pRacine est créé
et son membre pEnfants (pointeur vers collection) est initialisé à NULL.
du coup "pEnfant->Serialize(ar); " lance une exception.

De plus, comment serialisé mon pointeur vers l'objet pParent ? J'aimerai ne
pas reserializer l'objet parent mais juste garder la référence du pointeur.

Bref ç ne va pas du tout et je ne sais vraiment pas comment m'y prendre !

A l'aide !!!!

Merci beaucoup, ...que dis-je : merci énormement ! ;)

William
un petit newbie ...

__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________

2 réponses

Avatar
blukbluk42
Ca n'a aucun sens de vouloir serialiser des pointeurs. Un pointeur
correspond a une adresse memoire. Lorsque tu vas deserialiser pour
recuperer tes donnees, tu n'as aucune certitude sur l'etat de la
memoire.
La serialisation n'a de sens que pour des objets.
Il faut que lors de ta serialisation de la racine, tu serialise les
objets pointes et lorsque tu deserialise tu recree des instances
d'objets que tu affecte au pointeur.
j'espere que ca pourra t'aider

"William A." wrote in message news:<3f85c694$0$27037$...
Bonjour,

je m'arrache les cheveux sur le processus de serialization (c'est la
première fois que je tente de faire une serialization) en MFC
(document/vue).

Mon problème :

Je veux serialiser la structure de ma TreeView.
Mon document contient un pointeur "pRacine" vers un objet CDossier dérivé de
CObject.
la classe CDossier contient :
- des données membres de type CString, CTime, ....
- un pointeur "pEnfants" pointant vers une collection (CTypedPtr) d'objets
de type CDossier
- un pointeur "pParent" vers un objet de type CDossier

Je cré mon "pRacine" dans le constructeur de mon document.
j'initialise "pEnfant" et "pParent" à NULL car il s'agit de la racinede
l'arbre.

Mon interface permet de créer des dossiers enfants qui sont rajoutés à la
collection "pEnfant" correspondante.

Comment faire pour serializer mon pRacine ?

Ma fonction Serialize ressemble à celle ci-après :

CDossier::Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar << m_donnee1;
ar <<m_donnee2;
}
else
{
ar >> m_donnee1;
ar >>m_donnee2;
}

pEnfant->Serialize(ar);

}

MON PROBLEME :
j'arrive bien à sauvegarder mon document, le problème est à l'ouverture :
en effet à l'ouverture de mon programme comme je l'ai dit, pRacine est créé
et son membre pEnfants (pointeur vers collection) est initialisé à NULL.
du coup "pEnfant->Serialize(ar); " lance une exception.

De plus, comment serialisé mon pointeur vers l'objet pParent ? J'aimerai ne
pas reserializer l'objet parent mais juste garder la référence du pointeur.

Bref ç ne va pas du tout et je ne sais vraiment pas comment m'y prendre !

A l'aide !!!!

Merci beaucoup, ...que dis-je : merci énormement ! ;)

William
un petit newbie ...

__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________


Avatar
Patrice Labracherie
Il faut que tu laisse le processus de sérialization se faire, y compris pour
les pointeurs
Mais attention, tes pointeurs doivent dériver de CObject et leur classe doit
être sérializable

ie:
CDossier::Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar << m_donnee1;
ar <<m_donnee2;
ar << pEnfant;
}
else
{
ar >> m_donnee1;
ar >>m_donnee2;
ar >> pEnfant;
}


"William A." a écrit dans le message news:
3f85c694$0$27037$
Bonjour,

je m'arrache les cheveux sur le processus de serialization (c'est la
première fois que je tente de faire une serialization) en MFC
(document/vue).

Mon problème :

Je veux serialiser la structure de ma TreeView.
Mon document contient un pointeur "pRacine" vers un objet CDossier dérivé


de
CObject.
la classe CDossier contient :
- des données membres de type CString, CTime, ....
- un pointeur "pEnfants" pointant vers une collection (CTypedPtr) d'objets
de type CDossier
- un pointeur "pParent" vers un objet de type CDossier

Je cré mon "pRacine" dans le constructeur de mon document.
j'initialise "pEnfant" et "pParent" à NULL car il s'agit de la racinede
l'arbre.

Mon interface permet de créer des dossiers enfants qui sont rajoutés à la
collection "pEnfant" correspondante.

Comment faire pour serializer mon pRacine ?

Ma fonction Serialize ressemble à celle ci-après :

CDossier::Serialize(CArchive &ar)
{
if(ar.IsStoring())
{
ar << m_donnee1;
ar <<m_donnee2;
}
else
{
ar >> m_donnee1;
ar >>m_donnee2;
}

pEnfant->Serialize(ar);

}

MON PROBLEME :
j'arrive bien à sauvegarder mon document, le problème est à l'ouverture :
en effet à l'ouverture de mon programme comme je l'ai dit, pRacine est


créé
et son membre pEnfants (pointeur vers collection) est initialisé à NULL.
du coup "pEnfant->Serialize(ar); " lance une exception.

De plus, comment serialisé mon pointeur vers l'objet pParent ? J'aimerai


ne
pas reserializer l'objet parent mais juste garder la référence du


pointeur.

Bref ç ne va pas du tout et je ne sais vraiment pas comment m'y prendre !

A l'aide !!!!

Merci beaucoup, ...que dis-je : merci énormement ! ;)

William
un petit newbie ...

__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________