A l'aide !!! Serializer un pointeur vers une collection et autres problèmes !!!!!!!!!!!!!!!!!
2 réponses
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 !
__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 !
__________________________________________________________________ Goulou ICQ#: 111148586 Current ICQ status: + More ways to contact me __________________________________________________________________
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." <watzel@free.fr> wrote in message news:<3f85c694$0$27037$626a54ce@news.free.fr>...
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 !
__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________
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 !
__________________________________________________________________ Goulou ICQ#: 111148586 Current ICQ status: + More ways to contact me __________________________________________________________________
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 !
__________________________________________________________________ Goulou ICQ#: 111148586 Current ICQ status: + More ways to contact me __________________________________________________________________
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." <watzel@free.fr> a écrit dans le message news:
3f85c694$0$27037$626a54ce@news.free.fr...
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 !
__________________________________________________________________ Goulou
ICQ#: 111148586 Current ICQ status: + More ways to contact me
__________________________________________________________________
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 !
__________________________________________________________________ Goulou ICQ#: 111148586 Current ICQ status: + More ways to contact me __________________________________________________________________